반응형
기본 초기화의 문제점
// #1. 멤버 변수 배열은 초기화할 수 있는 방법이 없다.
struct A
{
int arr[100];
};
// #2. POD 동적 할당을 초기화할 수 있는 방법이 없다.
char* buff = new char[100];
// #3. STL 컨테이너를 초기화할 수 없다.
std::vector<int> vec;
// #4. 타입에 따라 초기화 구문이 일관적이지 않다.
int i(10); // 10으로 초기화
A a(); // a는 기본 생성자로 초기화?? A 타입을 리턴하는 함수 선언??
C++11에서 도입된 중괄호 {}를 사용한 초기화 방식을 "brace initialization" 또는 "uniform initialization"이라고 부릅니다.
int myInt = 42; // 기존의 초기화 방식
int myInt2(42); // 기존의 초기화 방식
int myInt3 = {42}; // brace initialization
일관된 초기화 문법
중괄호를 사용한 brace initialization은 여러 타입에 대해 일관된 문법을 제공합니다. 이로 인해 초기화 방식에 일관성이 생겨 코드의 가독성이 향상됩니다.
자동 형 변환 방지
int myInt = 3.14; // 자동 형 변환 발생
int myInt2(3.14); // 자동 형 변환 발생
int myInt3 = {3.14}; // 자동 형 변환 방지, 에러 발생
brace initialization 으로 초기화 코드
struct A
{
int arr[100]{1,2,3,4}; // 나머지는 0으로 초기화
};
char* buff = new char[100]{'a','b','c'}; // 나머진 '\0'으로 초기화
std::vector<int> vec{1,2,3,4};
int a{10};
A a{};
'프로그래밍 일반 > C++ 프로그래밍' 카테고리의 다른 글
[C++] 유용한 C++ 기능 - attribute specifier (0) | 2024.01.17 |
---|---|
[C++] 유용한 C++ 기능 - structured binding (0) | 2024.01.17 |
[C++] 유용한 C++ 기능 - if / switch init statement (0) | 2024.01.17 |
[C++] 생성자/파괴자에서 virtual 함수를 호출 (0) | 2022.01.18 |
[C++] std::function (0) | 2020.09.10 |