编译器警告(等级 4,关闭)C5240

“attribute-string”:在此语法位置将忽略属性

备注

当在错误的语法位置找到 [[nodiscard]][[maybe_unused]] 特性时,会出现警告 C5240。 例如,此语法位置中的 [[nodiscard]] 特性适用于 decl-specifier-seq,但不适用于函数 f

static [[nodiscard]] int f() { return 1; }

在 Visual Studio 2019 版本 16.10 之前,如果使用 [[nodiscard]][[maybe_unused]] 特性的语法位置不适用于声明的函数或对象,编辑器则会以无提示方式忽略这些特性的使用。 在 Visual Studio 2019 版本 16.10 及更高版本中,编译器改为发出默认处于关闭状态的 4 级警告 C5240。 有关如何启用此警告的详细信息,请参阅默认情况下关闭的编译器警告

示例

以下示例演示如何发生警告 5240:

// c5240.cpp
// Compile using: cl /EHsc /W4 /std:c++17 /permissive- /c c5240.cpp
#pragma warning( default: 5240 )
static [[nodiscard]] int f() { return 1; }  // C5240

若要解决此问题,请将该属性移动到正确的语法位置:

// c5240_fixed.cpp
// Compile using: cl /EHsc /W4 /std:c++17 /permissive- /c c5240_fixed.cpp
#pragma warning( default: 5240 )
[[nodiscard]] static int f() { return 1; }  // OK

另请参阅

C++ 中的特性