여러 가지 변수 초기화 방법 (variable initialization)
변수가 정의될 때, 즉시 해당 변수에 값을 지정할 수 있다. 이를 변수 초기화(variable initialization) 또는 짧게 초기화(initialization)라고 한다.
C++은 변수를 초기화하는 세 가지 기본적인 방법을 지원한다.
첫째, 대입 연산자(=)를 사용한 복사 초기화(copy initialization)
int nValue = 5; // copy initialization
둘째, 괄호()를 사용한 직접 초기화(direct initialization)
int nValue(5); // direct initialization
직접 초기화는 함수 호출과 매우 유사하지만, 컴파일러는 어떤 이름이 변수이고 어떤 이름이 함수인지를 잘 추적하여 제대로 컴파일한다.
직접 초기화는 일부 데이터 타입에서 복사 초기화보다 성능이 더 뛰어날 수 있다. 클래스에 관해 설명을 시작하면 다른 이점도 있다. 또한, 초기화와 할당을 구분하는 데도 도움이 된다. 따라서 복사 초기화보다 직접 초기화를 사용하는 것이 좋다.
C++ 11의 유니폼 초기화 (Uniform initialization in C++11)
셋째, 중괄호({})를 사용한 유니폼 초기화(uniform initialization)
복사 초기화 및 직접 초기화는 일부 타입의 변수에 대해서만 작동한다. 모든 데이터 타입에서 작동하는 단일 초기화 메커니즘을 제공하기 위해 C++ 11은 유니폼 초기화(uniform initialization)라는 새로운 형태의 초기화 메커니즘을 추가했다. (brace initialization이라고도 한다.)
int value{5};
빈 {}로 변수를 초기화하면 기본 초기화(defulat initialization)가 된다. 기본 초기화는 변수를 0으로 초기화 한다.
int value{}; // default initialization to 0
또 유니폼 초기화는 형 변환을 허용하지 않는다는 이점이 있다. 변수를 다른 자료형의 값으로 초기화하려고 하면 컴파일러에서 경고 또는 오류가 발생한다.
int value{4.5}; // error: an integer variable can not hold a non-integer value
출처: https://boycoding.tistory.com/181?category=1006674 [소년코딩]
'C++ > 자료' 카테고리의 다른 글
C++ 스택프레임 (0) | 2022.01.08 |
---|---|
C++ 정적바인딩 동적바인딩 (0) | 2022.01.07 |
C++ 메모리 정적 할당 vs 동적 할당 (Stack vs Heap) (0) | 2022.01.05 |
C++ region 키워드 (0) | 2022.01.01 |
C++ 전처리기 (preprocesser) (0) | 2021.12.30 |