C++에서는 변수를 초기화 하는 방법이 세 가지 있다.
대입하기 (Copy Initialization)
int num = 1;
대입 연산자(=)을 통해 우변의 값을 좌변에 대입하여 변수를 초기화하는 방법이다.
C언어에서 사용하던 방법을 그대로 이용할 수 있다.
괄호 사용하기 (Direct Initialization)
int num( 1 );
변수 이름 다음에 바로 괄호를 사용하여 초기화할 수도 있다.
클래스와 같은 더 복잡한 객체를 효율적으로 선언할 수 있도록 해준다.
중괄호 사용하기 (Brace Initialization)
int num{ 1 };
int num2 = { 2 };
int num3 {}; //0으로 초기화
Uniform Initialization, List Initialization이라고도 부르는 방법으로, 가장 현대적인 문법이다.
괄호와 마찬가지로 변수 다음에 값을 중괄호(Braces)로 감싸서 초기화한다.
또는 대입 연산자를 추가로 넣어서 사용하는 방법도 가능하고, 값을 비워두는 방법도 가능하다. 값을 비워둘 경우 0으로 초기화 된다.
int num{ 0 }; //실제로 0을 사용할 때
int num2{}; //값의 초기화만 필요할 때
실제로 '0'이라는 값이 필요할 때는 명시적으로 0을 초기화하여 사용하는 편이 좋다.
그렇지 않고 단순히 변수를 선언하고 쓰레기 값을 없애려고 어떤 값으로 초기화하려고 할 때는 그냥 값을 비워두어 자동으로 초기화하도록 하면 된다.
중괄호 초기화의 장점
최신 문법은 세 번째 방법인 중괄호 사용하기를 권장한다. 중괄호를 사용하여 초기화하면 얻을 수 있는 이점이 있기 때문이다.
int num {4.5};
//'double'에서 'int'로의 변환에는 축소 변환이 필요합니다.
중괄호로 변수를 초기화한 후 정수형 변수에 실수형 데이터를 넣으려고 하면 축소 변환(narrowing conversions)이 필요하다고 오류가 발생한다. 경고가 아니라 오류다. 프로그램이 실행되지 않는다.
다른 초기화 방법을 사용하면 실수의 소수부분을 잘라내고 4만 저장하는 축소 변환이 이루어지는데, 중괄호 초기화는 축소 변환을 허용하지 않는다.
short num1(100000);
short num2{ 100000 };
cout << num1; // -31072
cout << num2; // ERROR
또 표현 범위보다 큰 정수를 대입하려 할 때 발생하는 오버플로우(overflow)도 컴파일 과정에서 오류가 발생한다.
다른 방식으로 초기화한다면 오버플로우된 잘못된 값이 그대로 출력되는 것과는 다르다.
'프로그래밍 > C, C++' 카테고리의 다른 글
while 반복문을 종료하는 방법: 센티넬, EOF, 플래그 (0) | 2022.12.10 |
---|---|
[C++] 조정자를 사용해 입출력 형식을 지정하는 방법 (0) | 2022.12.07 |
[C++] 입출력(cin, cout)과 네임스페이스(namespace) (0) | 2022.11.17 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 11(1번~10번) (0) | 2020.11.26 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 10(16번~21번) (0) | 2020.11.26 |