2012-11-19 2 views
1

종종 오브젝트의 멤버 변수가 const가 될 수 있기를 희망하지만, 시스템은 생성 후에 해당 const 변수의 초기화를 허용합니다. 내가 이것을 할 수있는 메커니즘이 있습니까?오브젝트 생성 후 const 멤버 변수 초기화하기

class A 
{ 
public: 
    A(){} 
    initialize(int x) { c = x; } 
private: 
    const int c; 
} 

내가 그런 일을 할 수 있기를 원하는 :

명확히하기 위해, 여기에 예입니다. 건설시이 정보가 없으므로 초기화를 생성자의 초기화 목록으로 단순히 옮길 수는 없습니다.

+1

const 키워드를 특별히 사용하는 방법이 없다고 생각합니다. 값이 초기화되었는지 여부를 나타내는 일종의 플래그를 사용해야하고 해당 값을 기반으로 변경을 허용하거나 허용하지 않아야합니다. –

답변

4

아니요, 설명 후 const 멤버를 초기화 할 수 없습니다.

초기화 목록에서 멤버들을 초기화 할 수 있습니다 대부분의 경우에, 그래서 당신은 초기화 목록에 정적 함수를 호출 할 수 있습니다

class A 
{ 
public: 
    A(){} 
    initialize(int x):c(computeC(x)) {} 
private: 
    const int c; 
    static int computeC(int){/*...*/} 
}; 

또한 그 구성원에 대해 특별한 게터를 정의 할 수 있다는 점, 잊지 마세요 그것을 회원에게 액세스하는 데 사용하십시오.

class A 
{ 
public: 
    A(){} 
    initialize(int x) { c_internal = x; } 
private: 
    const int& c() const { return c_internal; } 
    int c_internal; 
}