c++ - reference_wrapper 和 std::ref 是如何工作的?

标签 c++ c++11

我正在尝试了解 std::ref 的工作原理。

#include <functional>
#include <iostream>

template <class C>
void func(C c){
    c += 1;
}

int main(){
    int x{3};
    std::cout << x << std::endl;
    func(x);
    std::cout << x << std::endl;
    func(std::ref(x));
    std::cout << x << std::endl;
}

Output : 3 3 4

在上面的代码中,我认为模板参数C第三个函数调用被实例化为 std::reference_wrapper<int> . 阅读时the reference , 我注意到没有 += std::reference_wrapper<int> 中的运算符. 那么,c += 1; 怎么样?有效吗?

最佳答案

how is c += 1; valid?

因为reference_wrapper<int>可隐式转换为 int&通过其转换运算符;如果操作数类型本身没有合适的重载,则考虑对操作数进行隐式转换。

关于c++ - reference_wrapper 和 std::ref 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16542391/

相关文章:

c++ - (JNI)从cpp lib调用函数时的数据类型转换

c++ - 拖放文件名 Visual (Managed) C++

c++ - 我目前正在使用什么 c++ norme?

c++ - 在继承层次结构中移动构造函数

c++ - initializer_list 和模板类型推导

.so 文件中的 C++ 模板化函数

c++ - 设置不对称截锥体

c++ - 如何组合范围 v3 变换、连接和循环?

c++ - 间接运算符的定义质量是什么?

c++11 - C++11 中的枚举到字符串