std::ref() 是干嘛的
时间: 2024-05-10 20:14:48 浏览: 4
`std::ref()` 是 C++ STL 中的一个函数模板,用于将一个对象包装为一个 reference_wrapper 对象,从而可以将该对象以引用的方式传递给函数或者算法,而不是进行拷贝。这在需要传递对象的情况下,可以减少不必要的拷贝操作,提高程序的性能。
例如,如果需要将一个对象以引用的方式传递给一个函数:
```cpp
void func(int& num) {
num++;
}
int main() {
int num = 0;
func(num);
std::cout << num << std::endl; // 输出 1
return 0;
}
```
但是如果尝试将一个常量传递给函数:
```cpp
void func(int& num) {
num++;
}
int main() {
const int num = 0;
func(num);
std::cout << num << std::endl; // 输出 0
return 0;
}
```
编译器会报错,因为常量不能被修改。这时可以使用 `std::ref()` 将常量包装为一个 reference_wrapper 对象,以引用的方式传递给函数:
```cpp
void func(int& num) {
num++;
}
int main() {
const int num = 0;
func(std::ref(num));
std::cout << num << std::endl; // 输出 1
return 0;
}
```
这样就可以在不改变原有代码的前提下,以引用的方式传递常量对象,并且在函数内部修改该对象的值。