为什么 g++ 编译这个?
最近,在非常疲倦之后,我编写了以下代码:
GLfloat* array = new GLfloat(x * y * z);
当然应该是:(
GLfloat* array = new GLfloat[x * y * z];
注意方括号而不是括号。)
据我所知,第一种形式无效,但 g++ 编译了它。 当然,它吐出了一个完全无法理解的段错误,但它编译了。
为什么?
Recently, after being very tired, I wrote the following code:
GLfloat* array = new GLfloat(x * y * z);
Which, of course should have been:
GLfloat* array = new GLfloat[x * y * z];
(Note the square brackets as opposed to the parenthesis.)
As far as I know, the first form is not valid, but g++ compiled it. Sure, it spat out a completely incomprehensible segfault, but it compiled.
Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
创建一个名为
array
的指针,指向GLfloat
类型的对象,其值为x * y * z
。Creates a pointer called
array
to an object of typeGLfloat
with a value ofx * y * z
.那么,
new T()
的结果是T*
,因此new GLFloat
将返回一个 GLFloat*。 只要x*y*z
可以有效地传递给 GLFloat 构造函数,它就是有效的代码。Well, the result of
new T()
is aT*
, sonew GLFloat
would return a GLFloat*. As long asx*y*z
is valid to pass to the GLFloat constructor, it's valid code.它与以下内容是同一类型的:
It's the same sort of thing as:
好吧,第一个表达式是一个指向值为 (xyz) 的 GLfloat 的指针,这是完全合法的。
Well, the first expression is a pointer to a GLfloat with value (xyz), which is perfectly legal.