我尝试了这段代码:
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 *;
然后一切顺利。这是为什么呢?
我尝试了这段代码:
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 *;
然后一切顺利。这是为什么呢?
有关详细信息,请参阅https://en.cppreference.com/w/cpp/language/new。
new
的无初始化语法可以是以下两种形式之一:
new (type)
或者new type
在第二种情况下,type
可能不包含括号。这也可以在上面链接的页面中进行演示:
在第二种情况下,type
可能不包含括号。这也可以在上述链接页面中看到。new int(*[10])(); // error: parsed as (new int) (*[10]) ()
new (int (*[10])()); // okay: allocates an array of 10 pointers to functions
对于你的情况,这意味着: auto p = new int (*)[10]; // error: parsed as (new int) ((*)[10])
auto p = new ( int (*)[10] ); // ok
当您使用别名时,可以编写:auto p = new array *;
因为这里的type
不包含括号。
auto p = new (int (*)[10]);
? - WhozCraignew
是一种不好的实践。在这种情况下,你应该使用std::vector<int>
或者std::array<int, 10>
。 - Marek R