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 |