본문 바로가기
프로그래밍 언어/C++

[C++] 일관된 초기화 (uniform initialization)

by 까망 하르방 2025. 1. 1.
반응형

일관된 초기화 (uniform initialization)

C++11 이전에는 변수 초기화 방법이

타입(구조체, 배열, 클래스)마다 다르다.

#include <cstdio>

struct Blog
{
    int a;
    int b;
};

int main()
{
    int x = 0;
    int arr[3] = {0, 0, 0};
    Blog gm = { 0, 0 };
}

 

 

C++11 부터는

일관된 초기화 (uniform initialization) 문법을 제공한다.

변수 종류 상관없이 한가지 방법으로 초기화 할 수 있다.

 

클래스이든 일반 변수인든

{ } 중괄호로 모든 변수를 초기화할 수 있다.

#include <cstdio>

struct Blog
{
    int a;
    int b;
};

int main()
{
    int x = {0};
    int arr[3] = {0, 0, 0};
    Blog gm = { 0, 0 };
}

 

 

「 = 」 등호 없이 초기화도 가능하다. (직접 초기화 Direct Initialization)

(등호가 있는 형태는 복사 초기화 Copy Initialization 이라고 한다.)

#include <cstdio>

struct Blog
{
    int a;
    int b;
};

int main()
{
    int x{0};
    int arr[3]{0, 0, 0};
    Blog gm{ 0, 0 };
}

uniform initialization 장점

처음 C++ 배운다면 일관된 초기화를 사용하면 되겠지만

많은 개발자들이 오래된 습관을 쉽게 버리기 쉽지 않다.

그렇다면 일관된 초기화 (uniform initialization) 장점으로는 뭐가 있을까?

prevent narrow

 

 

int 형에 소수값이나 char 형에 담을 수 없는 크기를 대입하면

경고(warning) 뜨지만 빌드는 성공한다.

하지만 uniform initialization 에서는

이를 허용하지 않고 Error를 띄우준다. (안정성 up)

#include <cstdio>

int main()
{
    int x1 = 1.2; // ok
    char y1 = 2000; // ok

    int x2{ 1.2 }; // error 
    char y2{ 2000 }; // error
}
반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C++] [STL] Vector 사용 방법  (0) 2025.01.09
[C++] decltype 키워드  (1) 2025.01.02
[C++] structure binding  (3) 2024.12.31
[C++] 디폴트 파라미터(default parameter)  (0) 2024.12.30
[C++] 헤더 변화 및 특징  (3) 2024.12.27

댓글