Heb*_* FF 12 c++ new-operator multidimensional-array
我尝试了这段代码:
auto p = new int (*)[10];
Run Code Online (Sandbox Code Playgroud)
但我收到错误消息:
test.cc:8:21: error: expected expression
auto p = new int (*)[10];
^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
我改变了我的代码:
typedef int array[10];
auto p = new array *;
Run Code Online (Sandbox Code Playgroud)
然后一切都很顺利。为什么是这样?
for*_*818 15
有关详细信息,请参阅https://en.cppreference.com/w/cpp/language/new。
没有初始化程序的语法new是
new (type)
Run Code Online (Sandbox Code Playgroud)
或者
new type
Run Code Online (Sandbox Code Playgroud)
在第二种情况下type可能不包含括号。上面的链接页面也演示了这一点:
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
当你使用别名时,你可以写
auto p = new array *;
Run Code Online (Sandbox Code Playgroud)
因为这里type不包含括号。