Is sizeof(int()) a legal expression?
这个问题的灵感是sizeof(void())是合法的表达吗?但有一个重要的区别,如下所述。
有问题的表达式是:
1 | sizeof( int() ) |
在C ++语法中,出现:
unary-expression:
sizeof unary-expressionsizeof ( type-id)
但是,
-
作为一元表达式,它是一个值初始化的
int prvalue,用多余的括号括起来 -
作为类型标识,它是没有参数返回
int 的函数的类型。
在
但是我不确定是否违反该语义约束是否暗示
注意对于另一个问题
明确地说,我的问题是:"
不,
[dcl.ambig.res] / 2:
An ambiguity can arise from the similarity between a function-style
cast and a type-id. The resolution is that any construct that could
possibly be a type-id in its syntactic context shall be considered a
type-id.
给出这个确切的例子:
1
2
3
4 void foo(signed char a) {
sizeof(int()); // type-id (ill-formed)
sizeof(int(a)); // expression
sizeof(int(unsigned(a))); // type-id (ill-formed)