gcc中类型的非常量引用的初始化无效,但Visual Studio中没有
invalid initialization of non-const reference of type in gcc but not Visual Studio
我有一些代码,其中IInterface是一个抽象类。
我在写这个
IInterface &q = InterfaceImpl();
并在Visual Studio 2008中进行了编译,运行良好。然后我把它移植到一个gcc项目中,突然我得到了这个错误:
error: invalid initialization of non-const reference of type 'IInterface&' from a temporary of type 'InterfaceImpl'
当试图找出错误时,我发现了以下线程错误:类型为"int&"的非常量引用的初始化无效从"int"类型的右值,至少现在可以理解出了什么问题。因此,将其更改为:
InterfaceImpl i = InterfaceImpl();
IInterface &q = i;
使其编译:
然而,这两个对象的生存期是相同的,所以我真的不明白为什么gcc不能像MS那样创建一个临时对象。我认为这是由标准定义的?当我看到上面的链接时,我可以理解为什么它对基类型之类的东西没有意义,但为什么在对象的情况下它需要得到一个错误?
我也试过这样做,但后来我得到的错误是IInterface是一个抽象类,不能实例化。
IInterface i = InterfaceImpl();
i
应该初始化,而不是实例化。这是否意味着我需要InterfaceImpl中的复制构造函数或赋值运算符来实现这一点,或者我为什么会出现这个错误?
InterfaceImpl()
返回一个临时对象(右值(,您不能将其保留在非常数引用中。
然而,当你实例化IInterface i
时,我就变成了一个左值,所以你可以把它保持在非常量引用中。
但是,在VS中允许将非常量引用绑定到右值。它已经在thread
中进行了讨论
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 不同的Visual Studio版本中缺少.dll
- 用Visual Studio在C++中嵌入Julia
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- Visual Studio在尝试读取resource.txt文件时崩溃
- Visual Studio 2017 不允许我创建 C++ 专用模板