我怀疑在下面的代码中,由于最令人头疼的解析问题,对同时具有构造函数参数和函数调用运算符参数的临时函数对象的调用在某种程度上是模棱两可的。
#include <iostream>
class Fun
{
public:
explicit Fun(int i): v_(i) {}
void operator()(int j) const
{
std::cout << (v_ + j) << "\n";
}
private:
int v_;
};
int main()
{
int a = 1;
int b = 2;
Fun(a)(b); // ERROR: conflicting declaration 'Fun a'
(Fun(a))(b); // OK: prints 3
return 0;
}
在 Ideone 上输出.
添加像 (Fun(a))(b)
这样的括号可以解决问题,但我不太明白 Fun(a)(b)
是如何实现的解析为声明 Fun a
。
最佳答案
不幸的是 Fun(a)(b);
可以被解析为 Fun a(b);
这是一个声明,而不是一个临时对象。
关于c++ - 解析对临时函数对象的调用中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12742658/