GCC を使用する C++ クラス コンストラクターに問題があります。
以下のクラス「foo」は、AL、AH、AX、EAXなどのプロセッサレジスタをエミュレートすることになっています...そして、このクラスに関連付けられたいくつかの基本的な算術演算が必要です。しかし、初期化または「foo」オブジェクトで奇妙な動作があります。
次の 2 つのケースでは同じ結果が得られません。
フー w = 0x12345678; // ケース 1 ふーw; // ケース 2 初期化 ( 2 ステップ) w=0x12345678;
私にとっては、ケース 2 が機能しています。GCC は foo() (コンストラクター 1) を呼び出し、次に = 演算子を呼び出します。最後に、w.m_val は問題ありませんが、ケース 1 の場合、GCC は直接 foo( long *) (コンストラクター 2) を呼び出し、他には何もしません。明らかに、それは私が期待しているものではありません。
char 、int、または long が "foo" の場合、どちらの場合も結果は同じになります。
コンストラクターについて何か誤解したか、何か間違ったことをしたのかもしれません。誰か助けてくれませんか?
ありがとう。
クラスフー { 公衆: foo(){ // コンストラクター 1 m_val=0; m_ptr=NULL; }; foo(long *p){ // コンストラクター 2、絶対に呼び出さないでください!!! m_val=0; m_ptr=p; }; friend foo operator+( const foo &rhs, const unsigned int v ); foo &operator+= (unsigned int v ) { m_val+=v; *これを返します。 } ~foo(){}; foo &operator= ( const foo &rhs ) { m_val=rhs.m_val; *これを返します。 }; foo &operator= ( const unsigned int v ) { m_val=v; *これを返します。 }; プライベート: unsigned int m_val; 長い *m_ptr; };