当我尝试动态分配一个指向 char 的指针数组时,我不小心添加了额外的括号
char** p = new (char*) [5];
并且发生了错误
错误:带括号的类型 ID 后禁止数组绑定|
我不明白什么是错的,上面的代码和有什么区别
char** p = new char* [5];
这些括号会改变语义吗?
当我尝试动态分配一个指向 char 的指针数组时,我不小心添加了额外的括号
char** p = new (char*) [5];
并且发生了错误
错误:带括号的类型 ID 后禁止数组绑定|
我不明白什么是错的,上面的代码和有什么区别
char** p = new char* [5];
这些括号会改变语义吗?
这些括号会改变语义吗?
不,它将语法从有效更改为无效。你不能随便把括号放在任何你喜欢的地方;他们只能放在允许括号的地方,这不是一个。
我认为您编写代码的方式看起来就像您调用“新”运算符的重载版本,该运算符用于初始化原始内存的位置,例如
struct point
{
point( void ) : x( 0 ), y( 0 ) { }
int x;
int y;
};
void proc( void )
{
point pts[2];
new( &pts[0] ) point[2];
}
这些括号会改变语义吗?
是的,new
操作员使用带括号的参数来触发“placement new”——它期望括号中的内容指向原始存储。
您给出new
要分配的对象的声明,只是没有名称,并且每个声明都以类型名开头。
// I find "inside-out, right to left" to be a helpful rule
char *a[5]; new char *[5]; // no parens, so array of 5 pointers, to char
char (*a)[5]; new char (*)[5]; // pointer to array, of char
该错误消息并不是编译器发出的更有用的错误消息之一。