C++中,右值引用和左值应用的区别,举几个例子说明
时间: 2024-05-08 14:22:04 浏览: 102
右值引用和左值引用都是C++11引入的新特性,它们的主要区别在于它们所引用的对象是左值还是右值。
左值引用一般用于引用左值,比如:
```c++
int a = 1;
int& b = a; // b是a的左值引用
```
右值引用一般用于引用临时对象或返回值,比如:
```c++
int&& c = 1; // c是1的右值引用
```
右值引用可以通过std::move函数将左值转换成右值,比如:
```c++
std::vector<int> v1;
std::vector<int> v2 = std::move(v1); // v2是v1的右值引用
```
另外,右值引用还可以用于实现移动语义,例如:
```c++
class MyString {
public:
MyString() : data(nullptr), len(0) {}
MyString(const char* str) {
len = strlen(str);
data = new char[len + 1];
strcpy_s(data, len + 1, str);
}
MyString(MyString&& other) {
data = other.data;
len = other.len;
other.data = nullptr;
other.len = 0;
}
~MyString() {
if (data != nullptr) {
delete[] data;
}
}
private:
char* data;
size_t len;
};
int main() {
MyString str1("Hello");
MyString str2(std::move(str1)); // str2是str1的右值引用,str1的data被置为nullptr
return 0;
}
```
阅读全文