Bjarne Stroustrup의 "The C ++ Programming Language 4th Edition" 에서 기본적으로 복사하여 붙여 넣기 :
목록 초기화 는 축소를 허용하지 않습니다 (§iso.8.5.4). 그건:
- 정수는 값을 보유 할 수없는 다른 정수로 변환 할 수 없습니다. 예를 들어, char to int는 허용되지만 int to char는 허용되지 않습니다.
- 부동 소수점 값은 해당 값을 보유 할 수없는 다른 부동 소수점 유형으로 변환 할 수 없습니다. 예를 들어, float to double은 허용되지만 double to 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
않습니까?