以下代码是安全的还是会导致 C++03 中的未定义行为?
class Aries {
public:
Aries() : Taurus("foo") , Leo(Taurus + "bar") {}
private:
string Taurus;
const string Leo;
};
这段代码显然是我实际问题的精简版。
之前在类声明中Taurus有意声明了Edit 。Leo我知道初始化是按照类声明中的初始化顺序发生的(而不是初始化列表中的顺序。)
以下代码是安全的还是会导致 C++03 中的未定义行为?
class Aries {
public:
Aries() : Taurus("foo") , Leo(Taurus + "bar") {}
private:
string Taurus;
const string Leo;
};
这段代码显然是我实际问题的精简版。
之前在类声明中Taurus有意声明了Edit 。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
这不是一个通用的解决方案,也不是一个真正理想的习语,但仍然可以提供帮助并且相对干净。
是的,您可以安全地使用在您正在初始化的成员之前初始化的成员。
注意初始化的顺序是类定义中的声明顺序。