我曾经遇到过这个问题http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.19
我的问题是,写作时
Foo x(Bar());
Run Code Online (Sandbox Code Playgroud)
为什么它"声明一个返回Bar对象的非成员函数"?如果我写的话我能理解
Foo x(Bar);
Run Code Online (Sandbox Code Playgroud)
但它认为()在Bar()中意味着什么?
Bar()这意味着"一个不带参数和返回的函数Bar".考虑一下这样一个函数的声明:
Bar GetBar();
Run Code Online (Sandbox Code Playgroud)
如果从中删除函数的名称,剩下的将描述函数类型.它使用的一些例子是模板参数; 你可以这样写:
std::function<int(float)> f1;
std::function<Bar()> f2;
Run Code Online (Sandbox Code Playgroud)
希望这能解释一般的语法.现在这意味着在这种特殊情况下.当函数类型用作函数类型的参数时,它会自动为函数指针类型取代.因此,等效(但更清晰)的声明将是:
Foo x(Bar(*)());
Run Code Online (Sandbox Code Playgroud)