Freigeben über


Warnung C26444

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

C++ Core Guidelines

ES.84: Deklarieren Sie keine lokale Variable ohne Namen (versuchen Sie es).

Eine unnamed variable Deklaration erstellt ein temporäres Objekt, das am Ende der Anweisung nicht Karte ist. 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.

Codeanalysename: 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: Deklarieren Sie keine lokale Variable ohne Namen (versuchen Sie es).