【发布时间】:2014-05-16 13:43:26
【问题描述】:
这个标题可能并不完全准确——它是基于我对正在发生的事情的最佳猜测,我认为它比“有人可以解释这段代码发生了什么吗?”更好
无论如何,我有这个代码:
class Class1 { };
class Class2
{
public:
Class2(Class1 other){}
};
void func(Class2 x){}
int main()
{
Class2 x(Class1());
func(x); //Compile Error
Class1 y1;
Class2 y2(y1);
func(y2); //Compiles fine
return 0;
}
所以当我编译它时,标记为“编译错误”的行在 g++ 4.9 中提供了一个错误:
main.cpp: In function ‘int main()’:
main.cpp:14:10: error: could not convert ‘x’ from ‘Class2 (*)(Class1 (*)())’ to ‘Class2’
func(x);
^
clang++ 3.4.1 提供了类似的错误。
我最好的猜测是它认为“x”是某种返回 Class2 的函数,而不是 Class2 本身,但是……为什么会这样?我认为对 Class1 的调用会返回一些匿名 Class1,它会被传递到 Class2 的构造函数中。
【问题讨论】:
-
我恢复了您的编辑。请不要添加问题的答案。这就是答案的目的。
标签: c++ function object most-vexing-parse