基本的にBjarne Stroustrupの「The C ++ Programming Language 4th Edition」からコピーして貼り付けます。
リストの初期化では、絞り込みは許可されません(§iso.8.5.4)。あれは:
- 整数を、その値を保持できない別の整数に変換することはできません。たとえば、char to intは許可されていますが、int to charは許可されていません。
- 浮動小数点値は、その値を保持できない別の浮動小数点型に変換できません。たとえば、floatからdoubleは許可されていますが、doubleからfloatは許可されていません。
- 浮動小数点値は整数型に変換できません。
- 整数値は浮動小数点型に変換できません。
例:
void fun(double val, int val2) {
int x2 = val; // if val==7.9, x2 becomes 7 (bad)
char c2 = val2; // if val2==1025, c2 becomes 1 (bad)
int x3 {val}; // error: possible truncation (good)
char c3 {val2}; // error: possible narrowing (good)
char c4 {24}; // OK: 24 can be represented exactly as a char (good)
char c5 {264}; // error (assuming 8-bit chars): 264 cannot be
// represented as a char (good)
int x4 {2.0}; // error: no double to int value conversion (good)
}
のみ使用する場合=が好まれる状況は、{}でauto
初期化することによって決定タイプを取得するキーワード。
例:
auto z1 {99}; // z1 is an int
auto z2 = {99}; // z2 is std::initializer_list<int>
auto z3 = 99; // z3 is an int
結論
特別な理由がない限り、代替手段よりも{}初期化を優先してください。
auto
ですか?