• 締切済み

DirectXのD3DXVECTOR3

directxでのCDに書いてあるこのソースの一部の事で質問します。 D3DXVECTOR3 mVecDir; mVecDir = D3DXVECTOR3( -0.5f, -0.5f, 1.0f); --------------------------------------------------------------- D3DXVECTOR3をDirectX SDK October 2004で調べたのですが、 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3() {}; D3DXVECTOR3( CONST FLOAT * ); D3DXVECTOR3( CONST D3DVECTOR& ); D3DXVECTOR3( CONST D3DXFLOAT16 * ); D3DXVECTOR3( FLOAT x, FLOAT y, FLOAT z ); // 型変換 operator FLOAT* (); operator CONST FLOAT* () const; // 代入演算子 D3DXVECTOR3& operator += ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator -= ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator *= ( FLOAT ); D3DXVECTOR3& operator /= ( FLOAT ); // 単項演算子 D3DXVECTOR3 operator + () const; D3DXVECTOR3 operator - () const; // 2 項演算子 D3DXVECTOR3 operator + ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator - ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator * ( FLOAT ) const; D3DXVECTOR3 operator / ( FLOAT ) const; friend D3DXVECTOR3 operator * ( FLOAT, CONST struct D3DXVECTOR3& ); BOOL operator == ( CONST D3DXVECTOR3& ) const; BOOL operator != ( CONST D3DXVECTOR3& ) const; } D3DXVECTOR3, *LPD3DXVECTOR3; これを自分が見た限り、戻り値がないと思います。 何故、mVecDir = D3DXVECTOR3( -0.5f, -0.5f, 1.0f);のD3DXVECTOR3は戻り値があるのでしょうか? ちなみに、質問のソース2行はD3DXVECTOR3 mVecDir( -0.5f, -0.5f, 1.0f);でもOKですよね? よろしくお願いします。

みんなの回答

回答No.2

初期化時と代入時でoperator = が呼ばれない時もあります。 (D3DXVECTOR3 mVecDir( -0.5f, -0.5f, 1.0f); と D3DXVECTOR3 mVecDir = D3DXVECTOR3 ( -0.5f, -0.5f, 1.0f); は同等) 手抜きサンプル) #include <iostream> struct hoge {   int x, y, z;   hoge(int x, int y, int z) { std::cout << "\t1" << std::endl; }   hoge& operator = (const hoge& h) { std::cout << "\t2" << std::endl; return *this; } }; int main() {   std::cout << "a" << std::endl;   hoge h = hoge(1, 2, 3);   std::cout << "b" << std::endl;   h = hoge(1, 2, 3); }

回答No.1

 こんにちは。 >>何故、mVecDir = D3DXVECTOR3( -0.5f, -0.5f, 1.0f);のD3DXVECTOR3は戻り値があるのでしょうか?  其れは、恐らく代入演算子が起動している思います。  D3DXVECTOR3& operator = (const D3DVECTOR3& r);  書いていない場合は自動的に作成されている筈だと思います。 >>ちなみに、質問のソース2行はD3DXVECTOR3 mVecDir( -0.5f, -0.5f, 1.0f);でもOKですよね?  はい。

20081217
質問者

お礼

ありがとうございました。