4
圓括號未命名臨時變量考慮下面的代碼:在C++
struct Foo
{
};
struct Bar
{
explicit Bar(const Foo&)
{
}
};
int main()
{
Foo foo;
Bar bar(foo); // Okay.
Bar(foo); // Will not compile.
(Bar(foo)); // Okay. Unnamed temporary requires parenthesis.
}
爲什麼周圍的臨時版本括號需要?他們解決了什麼模棱兩可的問題?
我的預感是:我認爲編譯器看到Bar(foo)
作爲函數的聲明,但我不確定爲什麼會這樣,因爲foo
(實例)不是一個類型。因此,括號強制將上述內容視爲表達式,而不是前向聲明。
有趣。謝謝! – Forge95 2012-02-11 02:18:29