为什么是“new int (*)[10]”错误的?

发布于 2025-01-12 09:07:11 字数 339 浏览 2 评论 0原文

我尝试了这段代码:

auto p = new int (*)[10];

但收到错误消息:

test.cc:8:21: error: expected expression
        auto p = new int (*)[10];
                           ^
1 error generated.

我更改了代码:

typedef int array[10];
auto p = new array *;

然后一切顺利。 这是为什么呢?

I tried this code:

auto p = new int (*)[10];

but I got error messeage:

test.cc:8:21: error: expected expression
        auto p = new int (*)[10];
                           ^
1 error generated.

I changed my code:

typedef int array[10];
auto p = new array *;

And then everything goes well.
Why is this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

醉殇 2025-01-19 09:07:11

有关详细信息,我建议您参考 https://en.cppreference.com/w/cpp/language /新

不带初始值设定项的 new 的语法是

new (type)

or

new type

在第二种情况下,type 可能不包含括号。上面的链接页面也演示了这一点:

new int(*[10])(); // 错误:解析为 (new int) (*[10]) ()
新(int(*[10])()); // 好的:分配一个包含 10 个函数指针的数组

对于您的情况,这意味着:

auto p = new int (*)[10];     // error: parsed as (new int) ((*)[10])
auto p = new ( int (*)[10] ); // ok

当您使用别名时,您可以这样写,

auto p = new array *;

因为这里 type 不包含括号。

For details I refer you to https://en.cppreference.com/w/cpp/language/new.

Syntax for new without initializer is either

new (type)

or

new type

In the second case type may not contain parenthesis. This is also demonstrated in the above linked page:

new int(*[10])();    // error: parsed as (new int) (*[10]) ()
new (int (*[10])()); // okay: allocates an array of 10 pointers to functions

For your case that means:

auto p = new int (*)[10];     // error: parsed as (new int) ((*)[10])
auto p = new ( int (*)[10] ); // ok

When you use the alias, you can write

auto p = new array *;

because here type does not contain parenthesis.

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