1
11
从概念上讲
右值
表达式创建临时对象,或有时表示现有对象。它可以像任何其他对象一样绑定到引用;但是,为了避免混淆,语言只允许
右值
和
函数调用的结果是
右值
(具体而言
x值
),因此它可以绑定到
右值
函数参数不能的引用。这允许您从
左值
,使用
这或多或少是正确的。官方的定义是“指定一个函数或一个对象”,这些都是有地址的东西。
不是真的。稍微简化一下,表达式可以是
左值
或
右值
,但可以从一个转换为另一个。一
左值
可以隐式转换为
右值
; 转换另一种方式可以通过一个演员来完成,如
就像任何其他引用一样-作为它绑定到的对象的别名或指针。唯一的区别是可以使用哪种表达式来表示(并可能创建)绑定到引用的对象。
试图获取 右值 直接,这是不允许的。由于问题是关于引用,而不是指针,因此允许将引用绑定到临时对象(其生存期被延长以匹配引用):
而不允许将其绑定到非常量 左值 参考
|
2
5
我无法调用函数:
我也不能调用函数:
C++11为我提供了一个右值引用的能力,所以我
可以
调用函数:
此外,在内部
OP似乎对右值有很好的把握。但是 this explanation of them 对我有帮助,也可能对其他人有帮助。它详细介绍了为什么C++03允许对右值的常量引用,而不是C++11的右值引用。 |
3
1
基本上,编译器的魔力。标准描述了规则,编译器制造商只需要弄清楚如何实现规则。 实际上,引用要么被优化,要么被实现为CPU级别的指针。
同样
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |