为什么g ++会编译这个?

时间:2009-03-15 20:15:55

标签: c++ compiler-construction syntax segmentation-fault

最近,在我累了之后,我写了下面的代码:

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

当然应该是:

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

(注意方括号而不是括号。)

据我所知,第一种形式无效,但g ++编译了它。当然,它吐出了一个完全不可理解的段错误,但它编译了。

为什么?

4 个答案:

答案 0 :(得分:15)

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

为名为array的对象创建一个名为GLfloat的指针,其值为x * y * z

答案 1 :(得分:9)

嗯,new T()的结果是T*,因此new GLFloat会返回GLFloat *。只要x*y*z有效传递给GLFloat构造函数,它就是有效的代码。

答案 2 :(得分:7)

这与以下内容相同:

int * p = new int(42);

答案 3 :(得分:2)

嗯,第一个表达式是一个指向GLfloat的指针,其值为(x y z),这是完全合法的。