std::ref 和直接传引用有什么区别吗?

先看代码:

string str = "";
thread Thread1(f,std::ref(str));

话说有必要用ref吗?直接创建一个引用不好吗?
然后我去查了一下。这个比较靠谱

大概总结就是:它既可以传值也可以传引用

  • std::ref(str) 创建了一个奇怪的对象(好像是 std::reference_wrapper 类对象,简称A类对象)
  • A对象的包了一个str的引用
  • 当你把A传参的时候,他会看看你这个函数是否使用了模板化编程(就是你这个形参的类型有没有写死)。如果你用了模板画编程,那他老老实实交出引用。如果你写死了形参的类型,那它就变通着只传递值了。

你可能感兴趣的:(c++)