【发布时间】:2015-03-24 16:36:01
【问题描述】:
我无法在一个常量依赖于另一个常量值的类中初始化常量。
class foo {
private:
const int secondConst;
const int firstConst;
public:
foo(int x) :
firstConst(x),
secondConst(firstConst*3)
{
// constructor code here....
}
}
secondConst 是一个垃圾值, 如何正确初始化它? 也许在 C++ 中,一个常量在初始化期间不能依赖其他常量?
我编辑了我的帖子。问题真的是在原始代码中我切换了声明它们的 const 字段。
【问题讨论】:
-
我认为这应该可行,但作为一种解决方法你不能这样做:
foo(int x) : firstConst(x), secondConst(x*3)? -
应该可以;一定还有其他问题。你能发一个complete test case来证明这个问题吗?
-
出于多种原因,我避免使用这样的 const 成员。如果您想要一个不改变的 Foo 对象,请将其设为 const。
-
It does work,请提供重现您在问题中提到的行为的代码。
-
每个成员初始化之间都有一个序列点,所以这段代码是正确的。但是,您确定您的实际代码中的成员按初始化顺序声明,就像它们在这里一样吗?成员按照它们在类声明中出现的顺序进行初始化,而不是它们在初始化列表中出现的顺序。
标签: c++ initialization constants