我过去遇到过这个问题 http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.19
我的问题是,写的时候
Foo x(Bar());
为什么它是“声明一个返回 Bar 对象的非成员函数”?我写了就明白了
Foo x(Bar);
但是它认为 Bar() 中的 () 意味着什么?
最佳答案
Bar()
意思是“一个不接受参数并返回 Bar
的函数”。考虑这样一个函数的声明:
Bar GetBar();
如果您从中删除函数名称,剩下的将描述函数类型。使用它的一些示例是在模板参数中;例如你可以这样写:
std::function<int(float)> f1;
std::function<Bar()> f2;
希望这能大致解释语法。现在这在这种特殊情况下意味着什么。当函数类型用作函数参数类型时,它会自动替换为函数指针类型。所以等效(但更清晰)的声明是:
Foo x(Bar(*)());
关于C++ Lite 问题 10.19。函数而不是变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215342/