기본 초기화 (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 |