`(&)()`在C++编译器错误消息中是什么意思

gwg*_*gwg 3 c++ g++

这个错误是什么意思?

error: no matching function for call to `foo::bar(Qux (&)())`
Run Code Online (Sandbox Code Playgroud)

我知道编译器(g ++)无法将函数调用与foo成员函数匹配.我特意询问最后的额外内容; 这一点:(&)().

作为参考,我的函数调用是这样的:

// inside another member function of `foo`
Qux qux();
this->bar(qux);
Run Code Online (Sandbox Code Playgroud)

签名bar是:

virtual void bar(Qux&);
Run Code Online (Sandbox Code Playgroud)

编译器还说唯一的候选者是:

virtual void bar(Qux&);
Run Code Online (Sandbox Code Playgroud)

我的函数调用签名与我的定义签名有何不同,具有什么(&)()意义?

Naw*_*waz 7

好吧,(&)()单独并不意味着什么.(&)()只是其中一部分Qux (&)()意味着引用一个不带任何东西并返回的函数Qux.这是因为:

Qux qux();      //PROBLEM!
this->bar(qux);
Run Code Online (Sandbox Code Playgroud)

这里的第一行不声明对象.它声明了一个函数.

在C++中搜索vexing parse,在这个网站上,你会看到很多关于它的主题,它会详细讨论这个问题.