メインコンテンツ

AUTOSAR C++14 Rule A8-5-3

A variable of type auto shall not be initialized using {} or ={} braced-initialization

説明

ルール定義

auto 型の変数は {} または ={} 初期化を使用して初期化しないものとします。

根拠

auto の型推測は、初期化で中かっこが使用された場合に直感に反した結果を生じます。推測される型は、初期化子から推測される型ではなく std::initializer_list<> です。

たとえば、次の定義では、

auto x{1};
x の型が int ではなく std::initializer_list<int> になります。一部のコンパイラは、この定義から int 型を推測しますが、この動作はコンパイラ間で統一されていません。

Polyspace 実装

チェッカーは、変数が {} または ={} 初期化を使用して初期化されている場合に auto 型を使用する変数定義にフラグを設定します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include<initializer_list>

void func() {
    auto aVar{1}; //Noncompliant
    auto anotherVar(1); //Compliant
    int aThirdVar{1}; //Compliant
    
    auto aVarList{1,2,3}; //Noncompliant
    std::initializer_list<int> anotherVarList{1,2,3}; //Compliant
}

この例では、auto 型が中かっこによる初期化で使用された場合にこのルールに反します。auto の代わりに、明示的な型指定が推奨されています。または、想定される型推測が確実に行われるかっこ () を初期化で使用できます。

チェック情報

グループ: 宣言子
カテゴリ: Required、Automated

バージョン履歴

R2020a で導入