[質問#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
と入力します。私が知る限り、これは最も厄介な解析の例です。私の質問は、この構文は何ですか。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:コードを見ましたが、[Vexing Parseについての混乱した詳細](http://stackoverflow.com/questions/7007817/a-confusing-detail-about-the-most-vexing-parse)、および正直私はそれを理解していない:(。 – NeonGlow
@NeonGlow rulsは同じで、関数に2つのパラメータがあり、2つ目に関数ポインタがあるとします。 – songyuanyao