Gotw 80包括下面的例子: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()
如何在語法上合法 - 它似乎試圖在參數列表中初始化成員或者可能聲明一個默認值)。任何人都可以解釋這個語法試圖做什麼?
當然..由於某種原因,那天看起來很不尋常 – Taras