0
一個奇怪的C++編譯器行爲今天讓我大吃一驚。C++對象創建或函數原型聲明
class Foo {
friend ostream& operator << (ostream& os, const Foo& rhs)
{
return os << sizeof(rhs) << endl;
}
};
struct Bar { };
int main()
{
Foo f(Bar());
cout << f;
return 0;
}
Apparantly,上面的代碼編譯罰款,即使是沒有定義
Foo(const Bar&);
c'tor。與-Wall編譯表明,編譯器解釋爲原型的表達
Foo f(Bar());
爲函數
Foo f(Bar (*)())
而不是用於創建Foo類型的對象的表達式。
究竟是什麼(catch)(規則)在這裏?
[最煩惱的解析:爲什麼不A a(());工作?](http://stackoverflow.com/questions/1424510/most-vexing-parse-why-doesnt-a-a-work) – Oswald
謝謝奧斯瓦爾德的鏈接。 – Rajat