プロが教えるわが家の防犯対策術!

directxでのCDに書いてあるこのソースの一部の事で質問します。

D3DXVECTOR3mVecDir;
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行はD3DXVECTOR3mVecDir( -0.5f, -0.5f, 1.0f);でもOKですよね?
よろしくお願いします。

A 回答 (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);
}
    • good
    • 0

 こんにちは。



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

>>ちなみに、質問のソース2行はD3DXVECTOR3 mVecDir( -0.5f, -0.5f, 1.0f);でもOKですよね?
 はい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/01/30 19:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!