One VS2010 bug ? Allowing binding non-const reference to rvalue WITHOUT EVEN a warning?(一个 VS2010 错误?允许在没有警告的情况下绑定非常量引用到右值?)
问题描述
string foo() { return "hello"; }
int main()
{
//below should be illegal for binding a non-const (lvalue) reference to a rvalue
string& tem = foo();
//below should be the correct one as only const reference can be bind to rvalue(most important const)
const string& constTem = foo();
}
- GCC 是给出编译错误的好方法:从
类型的临时对象对
std::string&
类型的非常量引用无效初始化std::string - VS2008 还不错,至少它给出了一个编译警告:警告 C4239:使用了非标准扩展:正在初始化":从
std::string
到std::string &
的转换 非常量引用只能绑定到左值 - 问题来了 - VS2010(SP1) 没有任何问题错误或警告,为什么??!!我知道 VS2010 中的 rvalue reference 可用于绑定 rvalue 但我没有使用
&&
,而是在演示代码中,我只是使用非常量左值引用!
- GCC is the good one to give a compile error: invalid initialization of non-const reference of type
std::string&
from a temporary of typestd::string
- VS2008 is not too bad as at least it gives a compile warning:
warning C4239: nonstandard extension used : 'initializing' :
conversion from
std::string
tostd::string &
A non-const reference may only be bound to an lvalue - Here comes the problematic one - VS2010(SP1) comples fine WITHOUT any
error or warning, WHY ??!!
I know rvalue reference in VS2010 can be used to bind with rvalue but I am NOT using
&&
, instead in the demo code, I was just using non-const lvalue reference !
这里有人能帮我解释一下VS2010的行为吗?是bug吗!?谢谢
Can somone help me explain the behavior of VS2010 here? Is it a bug !? Thanks
推荐答案
这是 VS 编译器的已知问题/功能.他们一直允许这样做,并且似乎没有任何推动删除该扩展.
That is a known issue/feature of the VS compilers. They have always allowed that and there does not seem to be any push into removing that extension.
这篇关于一个 VS2010 错误?允许在没有警告的情况下绑定非常量引用到右值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:一个 VS2010 错误?允许在没有警告的情况下绑定非
基础教程推荐
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- Windows Media Foundation 录制音频 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01