在C++11中,类型说明符包括类说明符和枚举说明符。(又称类定义和枚举定义)
根据语法规则,类型说明符可以出现在语言的多个位置,但并非所有这些位置都允许使用类说明符和枚举说明符。
例如:
根据语法规则,类型说明符可以出现在语言的多个位置,但并非所有这些位置都允许使用类说明符和枚举说明符。
例如:
struct C{} c;
// ok: types may be defined in the specifiers of a simple declaration
void f(struct S{});
// error: types may not be defined in parameter types
constexpr auto i = sizeof(enum E{});
// error: types may not be defined in ‘sizeof’ expressions
在标准中,它将类型说明符的使用划分为可以和不可以定义类型的情况,规则在哪里?例如,在哪里规定了在sizeof表达式中不能定义类型的规则?
sizeof
,这可以从5.3/1中指定的“一元表达式”语法中推断出来,但是仅凭粗略的查看并不明显(由于递归定义)。 - Mark Bsizeof(type-id)
->type-id
->type-specifer-seq
->type-specifier
->class-specifier
. 附录A是语法摘要。从句法上讲,这是允许的,因此一定有某个地方的文本说明您不能在那里定义类型。 - Andrew Tomazos