【问题标题】:Why does g++ compile this?为什么 g++ 编译这个?
【发布时间】:2009-03-15 20:15:54
【问题描述】:
最近很累,写了如下代码:
GLfloat* array = new GLfloat(x * y * z);
当然应该是:
GLfloat* array = new GLfloat[x * y * z];
(注意方括号而不是括号。)
据我所知,第一种形式无效,但g++编译了它。当然,它吐出了一个完全无法理解的段错误,但它编译了。
为什么?
【问题讨论】:
标签:
c++
compiler-construction
syntax
segmentation-fault
【解决方案1】:
GLfloat* array = new GLfloat(x * y * z);
创建一个名为 array 的指针,指向 GLfloat 类型的对象,其值为 x * y * z。
【解决方案2】:
好吧,new T() 的结果是T*,所以new GLFloat 将返回一个 GLFloat*。只要x*y*z 可以有效传递给 GLFloat 构造函数,它就是有效的代码。
【解决方案3】:
与以下内容相同:
int * p = new int(42);
【解决方案4】:
嗯,第一个表达式是一个指向具有值 (xyz) 的 GLfloat 的指针,这是完全合法的。