Sdílet prostřednictvím


Upozornění C26444

Nepokoušejte se deklarovat místní proměnnou bez názvu (es.84).

C++ Core Guidelines

ES.84: Nepokoušejte se deklarovat místní proměnnou bez názvu

Deklarace nepojmenované proměnné vytvoří dočasný objekt, který se zahodí na konci příkazu. Takové dočasné objekty s netriviálním chováním můžou odkazovat na neefektivní kód, který přiděluje a okamžitě vyhazuje prostředky, nebo na kód, který neúmyslně ignoruje neprimitivní data. Někdy může také znamenat prosté nesprávné deklarace.

Poznámky

  • Toto pravidlo detekuje typy s ručně napsaným destruktorem nebo destruktorem vygenerovaným kompilátorem, který tranzitivně volá ručně napsaný destruktor.
  • Toto pravidlo může označit kód, který vyvolá netriviální konstruktor typu RAII.
  • Logika dočasně přeskočí, pokud se používají ve výrazech vyšší úrovně. Jedním z příkladů je dočasné předání jako argumenty nebo použití k vyvolání funkce.

Název analýzy kódu: NO_UNNAMED_RAII_OBJECTS

Příklady

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

Pokud chcete tento problém vyřešit, převeďte dočasný objekt na místní.

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

Viz také

C26441
ES.84: Nepokoušejte se deklarovat místní proměnnou bez názvu