以下代码安全吗?或者它会导致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/

10-13 05:48