小编rpl*_*lgn的帖子

C++ catch 语句内的初始化声明符

您认为初始化的声明符是 catch 语句的捕获声明部分内的有效词法结构吗?例如,看一下下面的代码:

void func( int = 1 )
{
    try
    {

    }
    catch( int a = 1 )
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

它在最新的 MSVC 17.0.2 下编译良好,但在最新的 GCC 11.2 下无法编译(使用 Godbolt.org 测试)。我想知道答案,以便对 C++ 代码的正确类型形成纯粹的词汇理解。

如果您阅读了这篇 cppreference.com 文章,那么您会发现它说声明应该与函数签名参数的 (*) 完全相同,从而将合法性放入 MSVC C++ 词法分析器中。

* 实际上并不相同。文本恰好区分了声明符和独立的初始化部分。

c++ syntax lexer language-lawyer

3
推荐指数
1
解决办法
112
查看次数

标签 统计

c++ ×1

language-lawyer ×1

lexer ×1

syntax ×1