Thinking Different




사실 visual studio를 사용하면서 잘 알지 못했던 기능들중에 하나인 visual studio 2013버전부터 도입된 클래스 멤버변수 선언과 동시에 초기화 기능을 소개한다.


긴 말 필요없이 아래 코드를 보면 간단하다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdafx.h"
 
class test
{
public:
    test() : a(5)    // 2. 생성자 초기화는 그 다음에 적용된다.
    {
    }
 
public:
    void print() { cout << a << endl; }
 
private:
    int a = 10;        // 1. 멤버 변수 선언과 동시에 초기화
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    test a;
    a.print();
 
    return 0;
}


위 코드에서 보는것처럼 test 클래스의 private 멤버 변수 int a를 선언하고 선언과 동시에 10으로 초기화값을 넣어주는것이 가능해졌다.

(!2013 이전 버전은 제공되지 않으며 Error! 를 출력합니다.)



(사실 클래스를 작성해보면 멤버 변수를 선언하고 생성자 부분에 따로 변수명을 다시 적고 초기화값을 기입하는것이 여간 귀찮은 작업이 아닐 수 없었다. 그렇다고 초기화 작업을 하지 않으면 쓰레기값이 적용되기 때문에 에러의 소지가 발생할 우려도 크고 값의 초기화 부분에 따로 떨어져 있어서 가독성에도 안좋은 영향을 미치는거 같기도 했다.)


이 기능은 2013 버전부터 제공되며, 초기화 순서는 당연히 선언과 동시에 초기화된 값이 1순위가 되고, 그다음 생성자 초기화 순이다.


상속 관계에서의 초기화 부분에서는 당연히 생성자 초기화를 사용하면 되고, 그렇지 않은 경우에는 따로 생성자에 변수초기화를 할 필요가 없어진거 같아서 조금 더 수월해지고 가독성도 좋아진거 같다.