次の方法で共有


警告 C26444

名前のないローカル変数 (es.84) を宣言しないでください。

C++ Core Guidelines

ES.84: 名前のないローカル変数を宣言しないでください

名前のない変数宣言は、ステートメントの末尾にカード解除される一時オブジェクトを作成します。 このような非トリガー動作の一時オブジェクトは、リソースを割り当ててすぐにスローする非効率的なコード、または非特権データを意図せずに無視するコードを指している可能性があります。 また、宣言が明らかに間違っている可能性があります。

解説

  • このルールは、手書きデストラクターまたはコンパイラによって生成されたデストラクターを持つ型を検出します。このデストラクターは、手動で記述されたデストラクターを推移的に呼び出します。
  • この規則では、RAII 型の非トリガー コンストラクターを呼び出すコードにフラグを設定できます。
  • ロジックは、上位レベルの式で使用されている場合、一時的な処理をスキップします。 1 つの例として、引数として渡される、または関数の呼び出しに使用される一時キーがあります。

コード分析名: NO_UNNAMED_RAII_OBJECTS

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

この問題を解決するには、一時オブジェクトをローカルに変換します。

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

関連項目

C26441
ES.84: 名前のないローカル変数を宣言しないでください