以下代码安全吗?或者它会导致C++ 03中未定义的行为?
class Aries {
public:
Aries() : Taurus("foo") , Leo(Taurus + "bar") {}
private:
string Taurus;
const string Leo;
};
这段代码显然是我实际问题的简化版本。
在类声明中的
Taurus
之前,有意声明了编辑Leo
。我知道初始化是按照类声明中的初始化顺序进行的(而不是初始化列表中的顺序)。 最佳答案
只是为了澄清我在评论中提到的替代方法:
class Aries {
public:
friend Aries makeAries() {
string Taurus = "foo"; // easier to do computations here:
return Aries( Taurus, Taurus + "bar" );
}
private:
Aries( string const &inTaurus, string const &inLeo )
: Taurus(inTaurus) , Leo(inLeo) {}
string Taurus;
const string Leo;
};
Aries makeAries(); // must declare a friend factory outside the class
这不是通用的解决方案,也不是真正理想的习惯用法,但是仍然可以提供帮助并且相对干净。
关于c++ - 使用在初始化列表中早先初始化的成员初始化成员是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13779310/