2012-11-19 127 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; 
} 
相关问题