Gotw 80包括以下示例:
// Example 1
//
#include <string>
using namespace std;
class A
{
public:
A( const string& s ) { /* ... */ }
string f() { return "hello, world"; }
};
class B : public A
{
public:
B() : A( s = f() ) {}
private:
string s;
};
int main()
{
B b;
}
本文将讨论为什么该行s = f()
不正确 - 由于对象生命周期和构造顺序。文章指出,当时编译器没有发现错误。
但是,忽略初始化顺序和对象生存期的问题,我看不出s = f()
构造函数的参数列表在语法上如何合法 - 它似乎试图初始化参数列表中的成员(或者可能声明默认值价值)。谁能解释这个语法试图做什么?