Bagikan melalui


Peringatan C26444

Jangan mencoba mendeklarasikan variabel lokal tanpa nama (es.84).

Panduan Inti C++

ES.84: Jangan mencoba mendeklarasikan variabel lokal tanpa nama

Deklarasi variabel yang tidak disebutkan namanya membuat objek sementara yang dibuang di akhir pernyataan. Objek sementara tersebut dengan perilaku nontrivial dapat menunjuk ke kode yang tidak efisien yang mengalokasikan dan segera membuang sumber daya atau ke kode yang secara tidak sengaja mengabaikan data nonprimitive. Terkadang mungkin juga menunjukkan deklarasi yang salah secara biasa.

Keterangan

  • Aturan ini mendeteksi jenis dengan destruktor tulisan tangan atau destruktor yang dihasilkan kompilator yang secara transitif memanggil destruktor tulisan tangan.
  • Aturan ini dapat menandai kode yang memanggil konstruktor nontrivial dari jenis RAII.
  • Logika melompati sementara jika digunakan dalam ekspresi tingkat yang lebih tinggi. Salah satu contohnya adalah sementara yang diteruskan sebagai argumen atau digunakan untuk memanggil fungsi.

Nama analisis kode: NO_UNNAMED_RAII_OBJECTS

Contoh

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

Untuk memperbaiki masalah, konversikan objek sementara ke lokal.

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

Lihat juga

C26441
ES.84: Jangan mencoba mendeklarasikan variabel lokal tanpa nama