Binding temporary to a lvalue reference(将临时绑定到左值引用)
问题描述
我有以下代码
string three()
{
return "three";
}
void mutate(string& ref)
{
}
int main()
{
mutate(three());
return 0;
}
你可以看到我正在将 three() 传递给 mutate 方法.这段代码编译得很好.我的理解是,不能将临时对象分配给非常量引用.如果是,这个程序是如何编译的?
You can see I am passing three() to mutate method. This code compiles well. My understanding is, temporaries can't be assigned to non-const references. If yes, how this program is compiling?
有什么想法吗?
尝试过的编译器:VS 2008 和 VS2010 Beta
Compilers tried : VS 2008 and VS2010 Beta
推荐答案
以前是用VC6编译器编译的,所以我猜为了保持向后兼容VS2008是支持这个非标准扩展的.尝试使用 /Za (禁用语言扩展)标志,那么你应该得到一个错误.
It used to compile in VC6 compiler, so I guess to maintain backward comptibility VS2008 is supporting this non-standard extension. Try with /Za (disable language extension) flag, you should get an error then.
这篇关于将临时绑定到左值引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:将临时绑定到左值引用
- C++ 协变模板 2021-01-01
- 使用/clr 时出现 LNK2022 错误 2022-01-01
- 从python回调到c++的选项 2022-11-16
- STL 中有 dereference_iterator 吗? 2022-01-01
- 静态初始化顺序失败 2022-01-01
- 与 int by int 相比,为什么执行 float by float 矩阵乘法更快? 2021-01-01
- 一起使用 MPI 和 OpenCV 时出现分段错误 2022-01-01
- 近似搜索的工作原理 2021-01-01
- Stroustrup 的 Simple_window.h 2022-01-01
- 如何对自定义类的向量使用std::find()? 2022-11-07