本文へスキップ
BecomeCoder

C++のエラー · エラー12

narrowing conversion ― 初期化リストでの縮小変換(コンパイル)

{} を使う初期化(波かっこ初期化)では、情報が失われる可能性のある変換(doubleint など)が禁止されています。

出るコード

int main() {
    int x{3.14};   // double を int へ縮小変換
    return x;
}

エラーメッセージ

error: narrowing conversion of '3.14e+0' from 'double' to 'int' [-Wnarrowing]

直し方

意図した変換なら int x = static_cast<int>(3.14); のように明示的にキャストします。あるいは = による通常の初期化に変えます(警告は出ますがエラーにはなりません)。