警告 C26444

请勿尝试声明不带名称的局部变量 (es.84)。

C++ Core Guidelines

ES.84:不要(试图)声明一个没有名称的局部变量

未命名的变量声明将创建一个在语句末尾丢弃的临时对象。 这种具有非常规行为的临时对象可能指向分配并立即丢弃资源的低效代码,也可能指向无意中忽略非基元数据的代码。 有时,它也可能表明明显错误的声明。

备注

  • 此规则使用手动编写的析构函数或编译器生成的析构函数检测类型,这些析构函数可传递调用手写析构函数。
  • 此规则可以标记调用 RAII 类型的非常规构造函数的代码。
  • 如果在更高级别的表达式中使用临时变量,则逻辑会跳过临时变量。 一个示例是作为参数传递或用于调用函数的临时对象。

代码分析名称:NO_UNNAMED_RAII_OBJECTS

示例

struct A { A(int i); ~A(); };
void Foo()
{
    A{42}; // warning C26444: Don't try to declare a local variable with no name (es.84).
}

若要解决此问题,请将临时对象转换为本地对象。

struct A { A(int i); ~A(); };
void Foo()
{
    A guard{42}; // OK.
}

另请参阅

C26441
ES.84:不要(试图)声明一个没有名称的局部变量