2

以下代码是安全的还是会导致 C++03 中的未定义行为?

class Aries {
public:
    Aries() : Taurus("foo") , Leo(Taurus + "bar") {}

private:
    string Taurus;
    const string Leo;
};

这段代码显然是我实际问题的精简版。

之前在类声明中Taurus有意声明了Edit 。Leo我知道初始化是按照类声明中的初始化顺序发生的(而不是初始化列表中的顺序。)

4

2 回答 2

2

只是为了澄清我在评论中提到的替代方案:

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

这不是一个通用的解决方案,也不是一个真正理想的习语,但仍然可以提供帮助并且相对干净。

于 2012-12-08T16:39:47.333 回答
2

是的,您可以安全地使用在您正在初始化的成员之前初始化的成员。

注意初始化的顺序是类定义中的声明顺序。

于 2012-12-08T16:27:56.947 回答