我写了以下代码:
typedef int* pt;
pt p = pt(); // compile ok但
int* p = (int*)() // compile fail.我想弄清楚为什么?他们之间有什么不同?
发布于 2014-08-26 06:29:21
首先,函数转换表示法中不允许使用额外的括号。例如
int i1 = int (); // compiles
int i2 = (int)(); // doesn't compile但是,即使省略括号,示例也不会编译。
int* p = int*(); // doesn't compile这是因为函数式转换表示法要求类型名称要么是简单类型说明符,要么是类型名称说明符。
§5.2.3 expr.type.conv
1简单类型说明符(7.1.6.2)或类型名称说明符(14.6)后面加上括号的表达式列表构造给定表达式列表的指定类型的值。
...2表达式T(),其中T是非数组完整对象类型或(可能是cv限定的)void类型的简单类型说明符或类型名称说明符,它创建指定类型的prvalue,其值是T类型的值初始化(8.5)产生的值;对于void()情况不进行初始化。
简单类型说明符基本上是指由单个单词组成的类型名称。由于同样的原因,下面的行没有编译
unsigned int i = unsigned int(); // doesn't compilehttps://stackoverflow.com/questions/25499183
复制相似问题