【问题标题】:using word "not" as a name of c++ class causes error on VS2019使用单词“not”作为 C++ 类的名称会导致 VS2019 出错
【发布时间】:2020-02-17 14:38:00
【问题描述】:

我正在将现有项目迁移到 VS2019。具有非常简单的结构,可以在所有以前的版本中成功编译:

template <class Marker>
struct not
{
    // ...

错误 C2332:“结构”:缺少标签名称

NOTE-1我已经通过预编译生成检查了not 没有被某些宏替换,*.i 文件的输出与上面的声明完全匹配

NOTE-2当然,如果我重命名not->inv,那么一切都是正确的

【问题讨论】:

标签: c++ visual-studio visual-studio-2019


【解决方案1】:

not是C++中的关键字,不能作为类名。

请参阅 cppreference 上的 list of keywords

【讨论】:

    【解决方案2】:

    not! 的替代运算符,即 C++ 关键字,因此它不能用于命名。

    请参阅docs

    【讨论】:

      【解决方案3】:

      not 是标准 C++ 中的关键字,可用作 ! 令牌的替代项。

      默认情况下,MSVC 不支持替代运算符令牌。因此,它们可用作标识符,并且您的声明不会出错。

      但在符合 /permissive- 编译器标志的模式下,这些标记被视为具有标准含义的关键字,因此它们不能用作标识符。

      我建议不要使用not 作为标识符,即使不使用合规模式也是如此,因为这会使您的代码不标准且不可移植。

      https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance

      Why does VS not define the alternative tokens for logical operators?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-11
        • 1970-01-01
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多