我看到了一個代碼在這裏Cpp Quiz [問題#38]最讓人頭疼的解析
#include <iostream>
struct Foo
{
Foo(int d) : x(d) {}
int x;
};
int main()
{
double x = 3.14;
Foo f(int(x));
std::cout << f.x << std::endl;
return 0;
}
據說那裏,這個代碼是非法的形成,因爲Foo f(int(x));
將作爲函數聲明,而不是一個對象聲明來處理請輸入Foo
。據我所知,這是最令人頭疼的解析實例。我的問題是這是什麼語法int(x)在聲明Foo f(int(x));
意味着什麼?到目前爲止,我只看到了函數聲明,如:
Foo f(int);
和Foo f(int x);
同樣是它作爲Foo f(int x);
?
這是允許的,因爲有時需要它 - 例如使'int * a [10]'與'int(* a)[10]'不同。沒有人會花時間在必要時將語法限制爲* only *。 –
@BoPersson:我在[關於最煩人的分析](http://stackoverflow.com/questions/7007817/a-confusing-detail-about-the-most-vexing-parse)的混淆細節中看到了代碼,以及老實說,我不明白它:(。 – NeonGlow
@NeonGlow ruls是一樣的,期望該函數有兩個參數,第二個是函數指針。 – songyuanyao