본문 바로가기
NC University/Advanced C++

4일차 - 일관된 초기화 (uniform initialization)

by 날쑤 2015. 8. 4.

기존의 객체 초기화

  아래 코드는 기존 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