该标题可能并不完全准确,它基于我对所发生情况的最佳猜测,我认为它比“有人可以解释此代码所发生的情况更好”吗?
无论如何,我有以下代码:
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;
}
因此,当我编译它时,标记为“ Compile Error”的行在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的构造函数中。
Class2 x(Class1());
是一个令人烦恼的解析函数声明(Google技能在这里派上用场)。
选择:
Class2 x((Class1()));
Class2 x{Class1()};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句