C++ 中,如何判断表达式是左值还是右值
时间: 2024-05-10 15:15:55 浏览: 304
在 C++ 中,左值是一个标识符表达式,它表示某个对象或函数的地址,可以出现在赋值等操作符的左边。右值是一个表达式,它表示某个常量或者是一个临时的对象,它不能出现在赋值操作符的左边。
在 C++11 中引入了右值引用(rvalue reference),可以通过将一个表达式声明为右值引用,来将其强制转换为右值。右值引用可以使用 `&&` 来声明,例如:
```
int x = 1;
int&& rvalueRef = std::move(x); // 将左值 x 转换为右值
```
在 C++11 中还引入了 `decltype` 关键字,可以用来推导表达式的类型,包括左值和右值。例如:
```
int x = 1;
decltype(x) lvalue = x; // 推导为 int&
decltype(x + 1) rvalue = x + 1; // 推导为 int,因为 x + 1 是一个右值表达式
```
另外,在函数参数中使用引用类型,可以让函数接受左值或右值参数。例如:
```
void func(int& lvalueRef) {
// ...
}
void func(int&& rvalueRef) {
// ...
}
```
这样,当传递一个左值参数时,第一个函数会被调用;当传递一个右值参数时,第二个函数会被调用。
阅读全文