最近,在我累了之后,我写了下面的代码:
GLfloat* array = new GLfloat(x * y * z);
当然应该是:
GLfloat* array = new GLfloat[x * y * z];
(注意方括号而不是括号。)
据我所知,第一种形式无效,但g ++编译了它。当然,它吐出了一个完全不可理解的段错误,但它编译了。
为什么?
答案 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),这是完全合法的。