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

问题描述 投票:0回答:4

最近很累,写了如下代码:

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

当然应该是:

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

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

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

为什么?

c++ syntax segmentation-fault
4个回答
15
投票
GLfloat* array = new GLfloat(x * y * z);

创建一个名为

array
的指针,指向类型为
GLfloat
且值为
x * y * z
的对象。


9
投票

嗯,

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


7
投票

这与以下内容相同:

int * p = new int(42);

2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.