C++11增加了一个新的类型,称为右值引用(R-value-reference),标记为T&&。
1. 左值和右值
左值:表达式结束之后依然存在的持久对象(具名,能取地址)。
右值:表达式结束时就不能再存在的临时对象(不具名,不能取地址,右值具名后就成了左值)。
右值由两个概念组成:
- 将亡值:新增的、与右值引用相关的表达式,将要被移动的对象,T&&函数返回值、std::move返回值和转换为T&&类型的转换函数的返回值。
- 纯右值:比如非引用返回的临时变量、运算表达式产生的临时变量、原始字面量和lambda表达式。
注意: - 字符串字面值是左值。
- ++i是左值,i++是右值(纯右值)。
- 具名的右值引用是左值,不具名的右值引用是右值。
template<class T>
void test(T&& x)
{
std::cout << "Rvalue" std:: << endl;
}
template<class K>
void test(K& x)
{
std::cout << "Lvalue" << std::endl;
}
int main()
{
test("asd"); //输出Lvalue
return 0;
}
本文介绍了C++11中的右值引用,包括左值和右值的概念,&&的特性,引用折叠,以及右值引用如何优化性能。详细讲解了移动语义、std::move的作用,以及forward和完美转发的概念,帮助理解C++11中如何利用右值引用提高程序性能。
最低0.47元/天 解锁文章
2131

被折叠的 条评论
为什么被折叠?



