繁体   English   中英

为什么g ++会编译它?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM