본문 바로가기

# Lang/C++

6.1 로컬변수 초기화

 기본 초기화 (default initalization)

아무것도 하지 않는 초기화.

어떤 초기화도 진행하지 않았을 때 발생한다.


발생 사례 :

  • T object;

  • new T;

아무것도 하지 않는 것이 표준이기 때문에,

기본 초기화를 진행한 변수는 쓰레기값을 갖게된다.



발생 사례 해석 :

  • 이름 유무에 관계없이 (auto, static, thread-local) 스토리지로 선언되었고,
    어떠한 초기화도 사용하지 않은 경우.

 복사 초기화 (copy initialization)

다른 오브젝트의 값을 복사하여 초기화.


발생 사례 :

  • T object = other;

  • T array[N] = { other };

  • throw exception and catch

  • pass arguments when call by value

  • return expression value as non-reference


발생 사례 해석 :

  • 이름 있는 비참조 변수가 (auto, static, thread-local) 스토리지로 선언되었고,
    다른 오브젝트나 리터럴을 이용하여 초기화된 경우.


  • 배열을 aggregate initialization로 초기화 할 때,
    각각의 요소를 값으로 초기화하는 단계.


  • 새로운 복사값이 만들어지는 경우.
    (1) 익셉션을 던지고 받기.
    (2) 비참조로 인자 넘기기.
    (3) 비참조를 리턴하는 함수에서 return 표현식.


 값 초기화 (value initialization)

기본 생성자를 이용한 초기화.

인자없는 소괄호중괄호를 사용했을 때 발생한다.


발생 사례 :

  • T ( )

  • new T( )

  • T object{ };

  • T { }

  • new T { }


발생 사례 해석 :

  • 이름 없는 변수가 (auto, static, thread-local) 스토리지로 선언되었고,
    인자없는 소괄호나 중괄호를 사용한 경우.


 직접 초기화 (direct initialization)

기본 생성자가 아닌 생성자를 이용하여 초기화.

단일ㆍ다중인자 소괄호, 단일인자 중괄호를 사용했을 때 발생한다.


다중인자 중괄호는 aggregate initialization 으로 간주된다.



사례 구분 :

  • 인자없는 소괄호 : value initializaiton

  • 인자없는 중괄호 : value initialization

  • 단일인자 소괄호 : direct initialization

  • 단일인자 중괄호 : direct initialization

  • 다중인자 소괄호 : direct initialization

  • 다중인자 중괄호 : aggregate initialization


발생 사례 :

  • T object ( arg )

  • T object ( arg1, arg2, ... )

  • T object { arg }

  • T ( arg )

  • T ( arg1, arg2, ... )

  • T { arg }

  • static_cast expression

  • capture by copy of lambda-expression


발생 사례 해석 :

  • 변수 T a를 R 타입으로 캐스팅하면,  암묵적으로 R(a)가 생성된다.

  • 람다식에서 변수 T a를 copy 형식으로 캡쳐하면,  암묵적으로 T(a)가 생성된다. 


 참고 문헌

 

default initialization - cppreference.com

This is the initialization performed when a variable is constructed with no initializer. [edit] Syntax T object ; (1) new T new T ( ) (until C++03) (2) [edit] Explanation Default initialization is performed in three situations: 1) when a variable with auto

en.cppreference.com

 

value initialization(since C++03) - cppreference.com

This is the initialization performed when a variable is constructed with an empty initializer. [edit] Syntax T() (1) new T () (2) Class::Class(...) : member() { ... } (3) T object {}; (4) (since C++11) T{} (5) (since C++11) new T {} (6) (since C++11) Class

en.cppreference.com

 

copy initialization - cppreference.com

Initializes an object from another object [edit] Syntax T object = other; (1) T object = {other} ; (2) (until C++11) f(other) (3) return other; (4) throw object; catch (T object) (5) T array[N] = {other}; (6) [edit] Explanation Copy initialization is perfo

en.cppreference.com

 

direct initialization - cppreference.com

Initializes an object from explicit set of constructor arguments. [edit] Syntax T object ( arg ); T object ( arg1, arg2, ... ); (1) T object { arg }; (2) (since C++11) T ( other ) T ( arg1, arg2, ... ) (3) static_cast< T >( other ) (4) new T(args, ...) (5)

en.cppreference.com

 

'# Lang > C++' 카테고리의 다른 글

6.3 이니셜라이져 리스트  (0) 2019.05.04
6.2 중괄호 리스트 초기화  (0) 2019.04.30
5.2 완벽한 전달  (0) 2019.04.19
5.1 이동 의미론  (0) 2019.04.18
4.3 우측값 참조 (rvalue reference)  (0) 2019.04.16