[C++] 다양한 변수 초기화(initialization) 방법 (복사 초기화, 직접 초기화, 유니폼 초기화)

C++에는 변수를 초기화하는 세가지 기본적인 방법이 있다.

1
int var = 7;
cs

첫번째로 복사 초기화(copy initialization)가 있다.

복사 초기화는 위 코드처럼 대입연산자( = )를 사용하고

1
int var = 7.34;
cs

위 코드처럼 int 변수에 double 값을 대입하는 등 암시적인 형변환을 일부 허용한다. (단 위 코드같은 경우는 소수자리는 짤리고 정수자리까지만 적용됨)

그렇기에 편의를 챙길 수도 있긴 하지만 암시적인 형변환에 따른 위험도 함께 존재한다.

1
int var(7);
cs

두번째로 직접 초기화(direct initialization)가 있다.

직접 초기화는 위 코드 처럼 괄호 ()를 사용하고 복사초기화와 마찬가지로 암시적인 형변환을 일부 허용한다. (마찬가지로 int 변수에 double 대입시 소수자리는 짤림)

또한 일부 데이터 타입에서 복사 초기화보다 뛰어난 성능을 보이기도 하고 주로 초기화와 할당을 구분하기위해서도 쓰인다.

1
int var{ 7 };
cs

세번째로 유니폼 초기화(uniform initialization)가 있다.

앞서 소개한 두가지 초기화는 일부 타입의 변수에 대해서만 작동하지만 C++ 11에 들어와서 모든 데이터 타입에서 작동하는 단일 초기화 메커니즘을 제공하기 위해 추가된 초기화이다.

유니폼 초기화는 중괄호{}를 사용하고

1
int var{};
cs

빈 중괄호로 변수를 초기화하면 기본 초기화(default initialization)가 되고

1
int var{ 7.4 };
cs

앞선 두가지 초기화와 다르게 암시적인 형 변환을 허용하지 않아서 위 코드처럼 데이터타입에 맞지 않은 값을 넣게되면 에러가 발생하게된다.

관련글

in-coder 커뮤니티 HOT게시물

제목 작성자 작성일