Freigeben über


Warnung C26444

Versuchen Sie nicht, eine lokale Variable ohne Namen (es.84) zu deklarieren.

C++-Kernrichtlinien

ES.84: Versuchen Sie nicht, eine lokale Variable ohne Namen zu deklarieren

Eine nicht benannte Variablendeklaration erstellt ein temporäres Objekt, das am Ende der Anweisung verworfen wird. Solche temporären Objekte mit nichttriviellem Verhalten können entweder auf ineffizienten Code verweisen, der Ressourcen zuweist und sofort wegwirft, oder auf den Code, der unbeabsichtigt nichtprimitive Daten ignoriert. Manchmal kann es auch auf eine klar falsche Deklaration hinweisen.

Hinweise

  • Diese Regel erkennt Typen mit einem manuell geschriebenen Destruktor oder einem vom Compiler generierten Destruktor, der transitiv einen manuell geschriebenen Destruktor aufruft.
  • Diese Regel kann Code kennzeichnen, der einen nichttriviellen Konstruktor eines RAII-Typs aufruft.
  • Die Logik überspringt Temporärdateien, wenn sie in Ausdrücken höherer Ebene verwendet werden. Ein Beispiel ist Temporärdateien, die als Argumente übergeben oder zum Aufrufen einer Funktion verwendet werden.

Name der Codeanalyse: NO_UNNAMED_RAII_OBJECTS

Beispiele

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).
}

Um das Problem zu beheben, konvertieren Sie das temporäre Objekt in ein lokales Objekt.

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

Siehe auch

C26441
ES.84: Versuchen Sie nicht, eine lokale Variable ohne Namen zu deklarieren