为什么 g++ 编译这个?

发布于 2024-07-15 18:30:31 字数 275 浏览 5 评论 0原文

最近,在非常疲倦之后,我编写了以下代码:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

£烟消云散 2024-07-22 18:30:31
GLfloat* array = new GLfloat(x * y * z);

创建一个名为 array 的指针,指向 GLfloat 类型的对象,其值为 x * y * z

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

Creates a pointer called array to an object of type GLfloat with a value of x * y * z.

茶花眉 2024-07-22 18:30:31

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

Well, the result of new T() is a T*, so new GLFloat would return a GLFloat*. As long as x*y*z is valid to pass to the GLFloat constructor, it's valid code.

硬不硬你别怂 2024-07-22 18:30:31

它与以下内容是同一类型的:

int * p = new int(42);

It's the same sort of thing as:

int * p = new int(42);
丢了幸福的猪 2024-07-22 18:30:31

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

Well, the first expression is a pointer to a GLfloat with value (xyz), which is perfectly legal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文