为什么new int(*)[3]是一个错误?

MM
typedef int (*A)[3];

int (**p)[3] = new A;              // OK
int (**q)[3] = new (int(*)[3]);    // OK
int (**r)[3] = new int (*)[3];     // error

来自GCC的错误是error: expected primary-expression before ')' token为什么在此表达式中需要多余的括号?

亚历克斯

该标准将new-type-id定义new-declarator的最长序列还有一条注释,说明了类似的情况(尽管它为函数分配了指针):

5.3.4新[expr.new]

....

new-type-id:
    类型说明符序列 新声明opt

新声明
    ptr-operator新声明符opt
     noptr-new-declarator

noptr-new-declarator:
    [ 表达式 ]  属性说明符序列选择
    noptr-new-declarator   [ 常量表达式 ]  属性-说明符 序列选择

....

新型-ID在一个新的表达是可能的最长序列的新声明符[:在说明符运营商之间这防止模糊度&&&*,和[]和它们的表达对应。— 尾注] [示例

new int * i; // syntax error: parsed as (new int*) i, not as (new int)*i

*是指针说明符,而不是乘法运算。— 结束示例]

[注意new表达式new- id中的括号可能会产生令人惊讶的效果。[示例

new int(*[10])(); // error

格式不正确,因为绑定是

(new int) (*[10])(); // error

取而代之的是,new可以使用带括号的运算符版本来创建复合类型(3.9.2)的对象:

new (int (*[10])());

分配的10个函数指针(取任何参数和返回一个数组int端示例] - 注完]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我得到一个错误与进口阵营

为什么int变量抛出一个错误,而不是在分配给一个字节变量文字的诠释?

为什么int(maxint)给出一个long,而int(int(maxint))给出一个int?这是NumPy的错误吗?

为什么我有一个错误,但没有一个例外?

为什么int [] a = new int [0]; 允许吗?

为什么string :: compare返回一个int?

为什么Dapper的.Execute(...)返回一个int?

为什么getpagesize()返回一个int?

3 * 1000000000作为一个int溢出,但该变量为long long。为什么?

为什么Int(Float(Int.max))给我一个错误?

为什么new Array(256).join('')返回255个空格?

为什么shuffle'函数需要一个Int参数?

int t [1000000] = {1,2,3}; 产生一个大的二进制文件,为什么呢?

PHP:对象实例上的new运算符创建一个对象实例。为什么?

为什么为什么不断出现错误“ min()arg是一个空序列”?

为什么需要在main中装一个标准错误,而不是io错误?

为什么在Python 3中索引字节返回一个int而不是字节?

为什么ReactJS导航返回一个错误?

为什么不能将Int添加到元组的最后一个Int?

为什么我的SKAudioNode给我一个错误?

为什么Inpustream读取方法返回一个int?

在Python中,为什么list(None)是一个错误,但[None]不是一个错误?

为什么在Dafny函数中使用new会产生错误?

为什么我可以将一个Int分配给一个没有编译器错误的字符串?

为什么 eval 类给我一个从 int 到 double 的转换错误?

为什么 Scala 返回一个 ';' 预期但 ',' 发现错误?

为什么在定义名称时 Python 3 给我一个名称错误?

有什么区别?为什么第一个给我一个错误?

为什么 3==new Number(3) 给出 true 为什么?