기존의 객체 초기화
아래 코드는 기존 C++에서 여러 타입의 객체들을 초기화하는 코드이다.
#include <iostream>
#include <complex>
using namespace std;
struct Point { int x, y; };
int main(int argc, char* argv[])
{
int n1 = 0;
int n2(0);
int x[10] = { 1,2,3,4,5,6,7,8,9,10 };
Point p = { 1, 1 };
complex<int> c(1,2);
return 0;
}
uniform initialization
모든 종류의 객체를 동일한 방식으로 초기화하자는 컨셉. 위의 코드와 비교해보자.
int n1{ 0 };
int n2{ 0 };
int x[10]{ 1,2,3,4,5,6,7,8,9,10 };
Point p{ 1,1 };
complex<int> c{ 1, 2 };
이점
문법적인 일관성뿐만 아니라 narrow conversion으로 인한 데이터 손실, 혹은 타입의 표현 범위를 넘어서는 값의 대입을 컴파일 타임에 감지해 낼 수 있다.
int n3 = 3.4; //< OK, C로부터 물려받은 좋지 않은 문법
// int n4{ 3.4 }; //< Error, narrow conversion
char c3{ 3 }; //< OK
// char c4{ 400 }; //< Error
'NC University > Advanced C++' 카테고리의 다른 글
5일차 - initializer_list (0) | 2015.08.05 |
---|---|
4일차 - 객체의 field 초기화 (field initializer) (0) | 2015.08.04 |
4일차 - nullptr (0) | 2015.08.03 |
4일차 - static_assert (2) | 2015.07.30 |
4일차 - 완벽한 전달자 (perfect forwarding) (1) (0) | 2015.07.23 |