반응형
개인공부를 위한 기록입니다. 잘못된 점에 대한 지적 감사드립니다.
C++11 부터는 중괄호와 등호를 이용하여 변수를 선언할 수 있습니다.
중괄호{}를 사용한 변수 선언은 일관된 초기화(Uniform Initialization)라고 합니다.
예시로 확인 하겠습니다.
1. 먼저, 등호를 사용한 초기화 입니다.
// 1. 등호를 사용한 초기화 Copy initialization
int n1 = { 0 };
int x1[3] = { 1,2,3 };
Point p1 = { 1,2 };
2. 중괄호를 사용한 변수 선언입니다.
// 2. 등호 없이 초기화 Direct initialization
int n2{ 0 };
int x2[3]{ 1,2,3 };
Point p2{ 1,2 };
Uniform Initialization을 사용하면 데이터 손실을 방지할 수 있습니다.(Data-> Preventing Narrow)
// 일관된 초기화를 통한 데이터 손실 방지
int n1 = 3.14; // ok. 하지만 3으로 축소, 버그의 원인이 될 수 있음
int n2 = { 3.14 }; // error. 데이터 손실이 발생하는 초기화는 X
char c1 = 300; // ok. 하지만 overflow 발생
char c2 = { 300 }; // error. 300은 1바이트에 담을 수 없음
주석을 보시면 쉽게 확인하실 수 있습니다.
int n1 = 3.14; 로 초기화하면, 암시적 형변환이 가능합니다.
그러나, int n2 = {3.14};는 초기화가 불가능합니다.
char c1 = 300;은 overflow가 발생하지만 가능은합니다.
char c2 = {300}의 경우, 300은 1바이트에 담을 수 없으므로 에러가 발생합니다.(integer는 4byte에 저장합니다.)
이와 같이, 변수 초기화 시 Uniform Initialization을 이용하여 코드를 안전하게 작성할 수 있습니다.
반응형
'공부 > C++' 카테고리의 다른 글
make: Nothing to be don for 'all' - 해결 방법 (0) | 2022.08.23 |
---|---|
리눅스 Permission denied / cannot execute binary file (0) | 2022.07.15 |
#pragma once, C++의 header (0) | 2022.07.05 |
13. C++ Reference, 참조 (0) | 2022.01.27 |
11. 타겟넘버, BFS, 너비우선탐색 (0) | 2021.09.13 |
10. C++ 타겟넘버, DFS, 깊이우선탐색 (0) | 2021.09.08 |
9. C++ 미로찾기(Queue, Maze) (0) | 2021.08.19 |
8. C++ 동적프로그래밍, 재귀, Top Down, Bottom Up, 피보나치 (0) | 2021.08.19 |