我试图了解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
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我认为C第三个函数调用的模板参数被实例化为std::reference_wrapper<int>.在阅读参考文献时,我注意到没有+=操作员std::reference_wrapper<int>.那么,如何c += 1;有效?
Mik*_*our 18
怎么
c += 1;有效?
因为reference_wrapper<int>可以int&通过其转换运算符隐式转换为; 如果操作数类型本身没有合适的重载,则考虑操作数的隐式转换.
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |