Udostępnij przez


Ostrzeżenie C26444

Nie próbuj zadeklarować zmiennej lokalnej bez nazwy (es.84).

Podstawowe wytyczne dotyczące języka C++

ES.84: Nie (spróbuj) zadeklarować zmiennej lokalnej bez nazwy

Nienazwana deklaracja zmiennej tworzy obiekt tymczasowy, który jest odrzucany na końcu instrukcji. Takie obiekty tymczasowe z nietrywialnym zachowaniem mogą wskazywać na nieefektywny kod, który przydziela i natychmiast odrzuca zasoby lub kod, który przypadkowo ignoruje dane nieuprzywzględne. Czasami może również wskazywać wyraźnie nieprawidłową deklarację.

Uwagi

  • Ta reguła wykrywa typy za pomocą ręcznie napisanego destruktora lub destruktora generowanego przez kompilator, który przechodnio wywołuje ręcznie napisany destruktor.
  • Ta reguła może flagować kod, który wywołuje nietriwialny konstruktor typu RAII.
  • Logika pomija czasowo, jeśli są używane w wyrażeniach wyższego poziomu. Jednym z przykładów są tymczasowe, które są przekazywane jako argumenty lub używane do wywoływania funkcji.

Nazwa analizy kodu: NO_UNNAMED_RAII_OBJECTS

Przykłady

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

Aby rozwiązać ten problem, przekonwertuj obiekt tymczasowy na lokalny.

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

Zobacz też

C26441
ES.84: Nie (spróbuj) zadeklarować zmiennej lokalnej bez nazwy