我有一个类,并希望创建一个const int变量但是对于变量的值是不提供给我在类的构造函数。
在类的初始化方法我得到的值。 我可以给它分配在方法? 由于我赋予它只有一次(为const说的),为什么它不工作?
代码如下[只是个雏形]:
文件:啊
Class A
{
private :
const long int iConstValue;
public :
A();
initClassA();
}
文件:A.cpp
A::A()
{
//CanNot initialize iConstValue (Don't have it)
}
A::initClassA(some params)
{
// calculation according to params for iConstValue
iConstValue = (some value)
}
这是行不通的。 有人有什么解决方案?
注:我不能为iconstValue在构造函数中以任何方式获取价值 ,因为有一些限制。 所以请不要建议这样做。
一个小例子:
class A
{
public:
A():a(initial_value_of_a()) {}
private:
const int a;
int initial_value_of_a() { return 5; /* some computation here */ };
};
const
并不意味着你只能为它分配一次,你永远无法分配给一个const对象。 一个const变量初始化一次,它的值不能改变。 所以,你初始化它在构造函数中,当所有成员和基地被初始化,那么你就不能以后改变它。
如果你不能得到建筑的价值,你既可以把这些变量非const,所以你修改它,也许你会耽误施工,直到你把所有的数据,使用一个占位符,直到您构建真正的对象。
两期工程是一个代码的气味,它是用const的成员肯定是不相容的。
你不能这样做,因为你不能改变一个const变量的值。 由时间initClassA
运行常量数据成员已经(在这种情况下一些垃圾值)初始化。 所以,你可以将数据成员才真正初始化在构造函数初始化列表中的某些值。
如果你想设置的变量只有一次,那么你可以做的非常量,并增加保护,因此只能设置一次。 这是不漂亮,但它的工作:
class A
{
private :
long int iValue;
bool isInitialised;
public :
A() : iValue(0), isInitialized(false);
bool initClassA() {
if (isInitialized) return false;
iValue = something:
isInitialized = true;
return true;
}
}
但它不是很好的做法,可以初始化或不是对象。 对象应该是一个连贯的国家建构的时候,和客户不应该检查这些对象是否被初始化。
也许你可以做什么,是改变一个INT指针,在构造函数接收该指针,并更改您要指针:P
但它不会是相同的functionnality原因这将是指针,有const不再值:/
我想我需要改变设计,我应该在构造函数计算(或获得)const的变量值的任何方式。 由于没有办法,我可以设置它的价值更高版本。
文章来源: Can const member variable of class be initialized in a method instead of constructor?