我有一些代码,其中 IInterface 是一个抽象类。
我正在写这个
IInterface &q = InterfaceImpl();
并在 Visual Studio 2008 中编译它并且运行良好。然后我将它移植到 gcc 项目中,突然出现这个错误:
error: invalid initialization of non-const reference of type 'IInterface&' from a temporary of type 'InterfaceImpl'
当试图找出问题所在时,我发现了这个线程现在至少明白出了什么问题。所以改成这样:
InterfaceImpl i = InterfaceImpl();
IInterface &q = i;
使它编译:
然而,这两个对象的生命周期是相同的,所以我不太明白为什么 gcc 不能像 MS 那样创建临时对象。我认为这是由标准定义的?当我查看上面的链接时,我可以理解为什么它对于基本类型之类的东西没有意义,但是为什么在对象的情况下需要得到错误呢?
我也这样尝试过,但是后来我得到了错误,IInterface是一个抽象类,无法实例化。
IInterface i = InterfaceImpl();
i
应该初始化,而不是实例化。这是否意味着我需要 InterfaceImpl 中的复制构造函数或赋值运算符才能完成这项工作,或者为什么会出现此错误?
InterfaceImpl()
返回一个不能保留在非常量引用中的临时对象(右值)。
但是当你实例化时IInterface i
i 成为左值,因此您可以将其保留在非常量引用中。
但是 VS 中允许将非常量引用绑定到右值。这个里已经讨论过thread
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)