[英]Why does g++ compile this?
最近,在非常疲倦之后,我编写了以下代码:
GLfloat* array = new GLfloat(x * y * z);
当然应该是:
GLfloat* array = new GLfloat[x * y * z];
(请注意方括号而不是括号。)
据我所知,第一种形式无效,但g ++对其进行了编译。 当然,它吐出了一个完全无法理解的段错误,但它进行了编译。
为什么?
GLfloat* array = new GLfloat(x * y * z);
创建一个指向array
GLfloat
类型的对象,该对象的值为x * y * z
。
好吧, new T()
的结果是T*
,因此new GLFloat
将返回GLFloat *。 只要x*y*z
有效传递给GLFloat构造函数,它就是有效代码。
与以下内容相同:
int * p = new int(42);
好吧,第一个表达式是一个指向值(x y z)的GLfloat的指针,这是完全合法的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.