반응형
일관된 초기화 (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 |
댓글