본문 바로가기
NC University/Advanced C++

4일차 - 객체의 field 초기화 (field initializer)

by 날쑤 2015. 8. 4.

field initializer

  예전 C++ 98에서는 유일하게 클래스 안에서 필드를 초기화가 가능했던 문법은 static const 뿐이었다. 하지만 C++ 11부터는 이러한 제약이 사라졌기 때문에 아래와 같은 필드 초기화가 가능해졌다.

#include <iostream>
using namespace std;

class A
{
    int n{ 0 };                 //< C++ 11부터 OK.field initializer 문법 (1)
public:
    static const int c = 10;	//< C++98에서도 문제 없음. 
    A(int x = 0) : n(10)        //< (2)
    {
        n = 20;                 //< (3)
    }
};

int main(int argc, char* argv[])
{
    A aa(10);
    cout << aa.n << endl;  //< 20
}

  static const를 이용한 초기화는 여전히 이용가능하다. 그리고 (1)~(3)은 동일한 필드에 대한 초기화가 적용되는 순서이다. field initializer의 값이 가장 먼저 적용받으며, 생성자 내에서의 대입이 있을 경우는 이 값이 객체 생성시 해당 필드의 초기값이 된다.

'NC University > Advanced C++' 카테고리의 다른 글

5일차 - begin & end  (0) 2015.08.10
5일차 - initializer_list  (0) 2015.08.05
4일차 - 일관된 초기화 (uniform initialization)  (0) 2015.08.04
4일차 - nullptr  (0) 2015.08.03
4일차 - static_assert  (2) 2015.07.30