当一个常量取另一个常量值时,C++ 常量初始化

C++ constants initialization when one constant takes other constant value

我无法在 class 中初始化常量,其中一个常量取决于另一个常量值。

class foo {
private:
   const int secondConst;
   const int firstConst;
public:
   foo(int x) :
          firstConst(x),
          secondConst(firstConst*3)
   {
       // constructor code here....
   }
}

secondConst 是一个垃圾值, 我怎样才能正确初始化它? 也许在 C++ 中,一个常量在初始化期间不能依赖另一个常量?

我编辑了我的 post。问题确实是在原始代码中,我在声明它们的地方切换了 const 字段。

你的示例适合我。但是,如果我将顺序更改为

private:
   const int secondConst;
   const int firstConst;

然后 secondConst 得到垃圾。原因是数据成员是按照它们被声明的顺序初始化的,而不是按照它们在成员初始化列表中出现的顺序。

来自标准:

Then, non-static data members are initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).