C++11 std::reference_wrapper
创建一个对象或函数的引用,对象必须是 可复制(CopyConstructible)、可赋值(CopyAssignable) 的。 它经常被用作在标准容器(如 std::vector )中存储引用的机制,而标准容器通常不能保存引用。 辅助函数 std::ref 与 std::cref 常用于生成 std::reference_wrapper 对象。 std::reference_wrapper 也用于按引用传递参数给 std::bind 或 std::thread 的构造函数。 能隐式转换成 T&。 在 vector 中存储引用类型: #include <iostream>#include <list>#include <vector>#include <random>#include <functional>#include <algorithm> int main() { std::list<int> l(10); std::iota(l.begin(), l.end(), -4); // 从 -4 开始,逐个 +1 std::vector<std::reference_wrapper<int>> v(l.begin(), l.end()); // 不能在 list 上用 shuffle (要求随机访问),但能在 vector 上使用它 std::shuffle(v....