posted by REDFORCE 2017. 3. 22. 18:19

목차


1. Auto

2. range based for

3. enum class

4. non-static data member initializers

5. initializer lists

6. default / delete definition

7. override / final

8. emplacement

9. constexpr

10. lambda

11. random

12. thread


이번 글에서는 [4-5편] non-static data member initializers 와 initializer lists


를 함께 다루도록 하겠습니다.


4, 5편 내용은 짧기 때문에 두 편을 한 글로 붙였습니다.



4. Non-static data member initializers


 - C#, Java 처럼 멤버 변수 정의와 동시에 초기 값을 할당 할 수 있다.


대체 이것이 무슨 말?? 이냐 하면


역시나 코드로 바로 보도록 하자.




위에서 private: 아래의 멤버 변수를 살펴보면


선언과 동시에 초기화가 진행 되는 것을 볼 수 있다.



옛날엔 이거 안됐다!!


근데 지금은 된다 ㅡ, .  ㅡ;


학창 시절 Java를 배웠을 때는 당연히 되던거라 게임 프로그래밍으로 넘어오면서 C++을 할 때 이게 안됐던 시기엔


어 = _=..왜안되지...원래안되나...하고 넘어갔었으나


C++11로 넘어오면서 가능해진 것으로 알고 있다.


즉 헤더에서도 멤버 변수 선언과 동시에 초기화가 가능하다!



여기까지는 다들 "뭐...음..그래...그래서...? 당연하거 아닌가?" 하고 넘어 갈 수 있다.



다시 먼저 코드를 보도록 하자.



살펴보면 private이 주석 처리 되어


멤버변수들이 접근한정자 public: 으로 바뀌게 되었고



외부에서 TEST test { 1 , "test" }; 로 초기화가 가능해졌다!


이 말인즉 public 접근이 가능한 클래스 멤버 변수가 외부에서 초기화가 바로 가능하다 라는 점이다.


이걸 잘 응용해본다면 외부 다른 클래스에서도 해당 클래스의 new로 선언함과 초기화를 바로 진행이 가능하게 만들 수 있다는 것!



그 외에도 기본적인 타입들에 대해서 initializer를 쓸 수 있다.



5. initializer lists

  • 초기화 리스트 전용 type
  • 함수의 인자, 유저 정의형, STL 컨테이너의 초기화에 사용할 수 있다.

위에서 본 initializer와 마찬가지로 STL컨테이너도 똑같이 적용시킬 수 있다.

Template을 이용한 Vector 컨테이너 초기화



일반적인 배열 초기화


(오오...auto 슨상님이 등장했다)



결론. 멤버 이니셜라이즈를 통해 초기화 구문을 쉽게 정의 할 수 있다!