2009-03-15 14 views
0

は最近、非常に疲れているの後、私は次のコードを書いた:されている必要がありますもちろんのなぜg ++はこれをコンパイルしますか?

GLfloat* array = new GLfloat(x * y * z); 

どの、:

GLfloat* array = new GLfloat[x * y * z]; 

(括弧とは対照的に、角括弧に注意してください。)

私が知る限り、最初の形式は有効ではありませんが、g ++はそれをコンパイルしました。確かに、それは完全に理解できないセグメンテーションを吐き出すが、コンパイルされる。

なぜですか?

答えて

15
GLfloat* array = new GLfloat(x * y * z); 

x * y * zの値を持つタイプGLfloatのオブジェクトにarrayと呼ばれるポインタを作成します。

2

まあ、最初の式は、値(x yz)を持つGLfloatへのポインタであり、完全に合法です。

9

まあ、new T()の結果はT*なので、new GLFloatはGLFloat *を返します。 x*y*zがGLFloatコンストラクタに渡すことが有効である限り、それは有効なコードです。

7

それはようなものと同じ種類だ:

int * p = new int(42); 
関連する問題