gpt4 book ai didi

c++ - 是一个声明 void();合法的,实际上是什么?

转载 作者:可可西里 更新时间:2023-11-01 17:56:37 25 4
gpt4 key购买 nike

我有一小段代码,其中有一个语句 void();

int main() 
{
void( ); // 1: parses fine in GCC 5.4.0 -Wpedantic
// void; // 2: error declaration does not declare anything
}

1 void() 到底是什么?

  • 匿名函数声明?
  • 类型声明?
  • 空表达式?

什么使 1 void() 与 2 void; 不同?

我已经读过:

  1. Is sizeof(void()) a legal expression?但是 void() 被认为是 sizeof 中的一种类型
  2. What does the void() in decltype(void()) mean exactly?它在 declspec 中被考虑的地方。
  3. 我读了Is void{} legal or not?

但我很好奇松散的语句 void();与其中一个不同(当然还有为什么)

最佳答案

void; 是一个错误,因为语言语法中没有匹配该代码的规则。特别是没有规则 type-id ;,

然而,代码void()匹配两条语法规则:

  1. type-id .
  2. postfix-expression,子案例是simple-type-specifier ( expression-list-opt )

现在,解析器需要将 void(); 与语法规则相匹配。即使 void() 匹配 type-id,如前所述,没有匹配 type-id 的规则 ;。因此,解析器拒绝在此上下文中将 void() 解析为 type-id 的可能,并尝试另一种可能性。

有一系列规则定义 postfix-expression ; 生成一个语句。因此 void() 在此上下文中被明确解析为 postfix-expression

正如您已经链接的其他答案所描述的,此代码作为 后缀表达式 的语义是 void 类型的纯右值。

相关链接:Is sizeof(int()) a legal expression?

关于c++ - 是一个声明 void();合法的,实际上是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43096571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com