*중괄호 초기화 { }
int a = 0;
int b(0);
int c{ 0 };
Knight k1;
Knight k2 = k1;
Knight k3{ k1 };
*어떤 '장점' 이 있는가 ??
1. 컨테이너 초기화에 잘 어울림.
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
int arr[] = { 1,2,3,4 };
vector<int> v2{ 1,2,3 };
2. 축소 변환 방지
=> 변수의 데이터 손실에 대한 에러를 발생시킴.
int x = 0;
double y(x);
double z{ x };
'축소 변환' 은 가능한 값의 일부를 저장하지 못할 수도 있는 데이터 형식으로 값을 변경합니다.
예를 들어 소수 값은 정수 계열 형식으로 변환될 때 반올림되고 로 변환되는 숫자 형식은 또는 로 Boolean True False 줄어듭니다.
int -> float 변환은 완벽하게 이루어지지도 않고애당초 float는 일종의 근사치를 개념하는 것.
int의 범위는 –2,147,483,648 ~ 2,147,483,647
float의 범위는 -3.4×10^38 ~ 3.4×10^38
3. 기본 생성자 생성 시,
Knight k4 { };
Knight k4( ); => 클래스 선언(생성자호출) 이 아니라, 함수 선언이 되어버림.
=> 이런 상황정도를 방지할 수 있다 정도.
*어떤 '단점' 이 있는가 ??
Knight(int a, int b)
{
cout << "int int !!" << endl;
}
Knight(initializer_list<int> li)
=> 해당 생성자가 ( 최상위포식자 ) 가 되어버림.
{
cout << "initializer list !!" << endl;
}
Knight k5{ 1,2,3,4,5 };
=> 만약
Knight k2{1, 2} 일 때, ( int a, int b ) 생성자가 아니라,
initializer_list 생성자가 호출되어져버림.
*stl 을 사용할 때도 이런식의 혼동이 있을 수 있음.
vector<int> v1{1, 2} 시, 데이터 1개에 2를 넣어라 이지만,
실제로 1, 2 데이터가 들어가 있음.
본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다.
'프로그래밍 > C++' 카테고리의 다른 글
#63. nullptr (0) | 2022.07.22 |
---|---|
#62. auto (0) | 2022.07.22 |
#60. Algorithm (0) | 2022.07.21 |
#59. set & multimap & multiset (0) | 2022.07.21 |
#58. Map (0) | 2022.07.21 |