Uniform Initialization와 std::initializer_list
C++ 2023. 8. 29. 12:03 |Uniform Initialization
Uniform Initialization은 C++11 이상에서 권장하는 초기화 방식이다.
struct Point
{
Point(const float x, const float y): x(x), y(y)
{
}
float x, y;
};
만약 위 Point 객체를 전통적인 초기화 방식을 사용할 경우 Narrowing Conversion(정보의 손실이 있는 형변환)이 허용된다.
그러나 중괄호 { } 를 이용한 Uniform Initialization을 사용하면 이를 허용하지 않아 좀 더 타입 안정성을 높일 수 있다.
int main()
{
int a=1, b=2;
Point point1(a,b); // int타입이 float 타입으로 묵시적 형변환을 허용한다
Point point2{a,b}; // C2398 : conversion from int to const float requires a narrowing conversion
}
또한 다음과 같이 std::initializer_list를 사용한 초기화가 가능하게 된다.
int main()
{
std::vector<Point> points{{1,2},{3,4}};
}
그런데 모순적이게도 std::initializer_list를 사용할 경우 Narrowing conversion을 허용하게 된다는 점에 유의하자.
'C++' 카테고리의 다른 글
[C++] 코루틴(Coroutine) 분석(작성 중) (0) | 2024.09.15 |
---|---|
[C++] 자주 발생하는 표준 컨데이너 관련 Error (0) | 2023.11.19 |
VC++ Compile Error 모음 (0) | 2023.01.25 |
복사 불가능한 클래스 속성 만들기 noncopyable (0) | 2022.11.01 |
[C++] 자주 사용되는 라이브러리 Tip (0) | 2022.07.29 |