ich einen Code hier bei Cpp Quiz [Frage # 38] sahdrängendsten Parsen
#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;
}
Es wird gesagt, dort, dass dieser Code schlecht ausgebildet ist, weil Foo f(int(x));
als Funktion Erklärung behandelt werden und nicht als Objekt Erklärung Geben Sie Foo
ein. Soweit ich weiß, ist dies ein Beispiel für die meisten Ärger. Meine Frage ist, was ist diese Syntax int (x) in Aussage Foo f(int(x));
bedeutet? Bisher sah ich nur Funktionsdeklarationen wie:
Foo f(int);
undFoo f(int x);
Ist es gleich wie Foo f(int x);
?
Es ist erlaubt, weil es manchmal benötigt wird - wie 'int * a [10]' anders als 'int (* a) [10]' machen. Und niemand hat sich die Mühe gemacht, die Syntax bei Bedarf auf * nur * zu beschränken. –
@BoPersson: Ich sah den Code bei [Ein verwirrendes Detail über die Most Vexing Parse] (http://stackoverflow.com/questions/7007817/a-confusing-detail-about-the-most-vexing-parse), und ehrlich gesagt verstehe ich es nicht :(. – NeonGlow
@NeonGlow Die ruls ist das gleiche, erwarten, dass die Funktion zwei Parameter und die zweite ist ein Funktionszeiger. – songyuanyao