早期学习C语言的时候,认为可以被修改的左值是放在左边的,右边的则通常放置右值,后来转C++之后,随着C++不断地完善更新,发现有时候越来越捉摸不透C++了,右值已经与它最初的概念完全不一样了,越来越丰富。
这篇文章我尽可能用一些浅显易懂的文字和简要的代码示例来解释下左值,右值,左值引用,右值引用和亡值的特点和用法。
在C++11之前的版本中,一个值要么是右值,要么是左值。左值是指任何可能位于赋值=运算符左侧的值。右值是指允许位于赋值右侧但不位于左侧的任何值。
int i = 0;
所以在上面的例子中,i是一个左值,0是一个右值。像0=i这样的语句是不允许的。
不过C++11之后,就开始变得有点复杂,现在我们有左值(lvalue),右值(prvalue),亡值(xvalue)。
下面这个例子不是所有人都能回答正确它的输出,但我确信看了这篇文章后,你就一目了然了。
#include <iostream>
using namespace std; void func(int& i) {cout << "call func(int& i)" <<endl;
}void func(int&& i) {cout << "call func(int&& i)" << endl;
}
int main() {i