C++ 如何将数据传递给引用包装器

C++ 如何将数据传递给引用包装器,c++,c++11,reference,reference-wrapper,C++,C++11,Reference,Reference Wrapper,考虑以下代码: //option no 1 struct foo{ foo(baz &b) : _b(b){} std::reference_wrapper<baz> _b; }; //option no 2 struct bar{ bar(std::reference_wrapper<baz> b) : _b(b){} std::reference_wrapper<baz> _b; }; //选项1 结构foo

考虑以下代码:

//option no 1
struct foo{
    foo(baz &b) : _b(b){}

    std::reference_wrapper<baz> _b;
};

//option no 2
struct bar{
    bar(std::reference_wrapper<baz> b) : _b(b){}

    std::reference_wrapper<baz> _b;
};
//选项1
结构foo{
foo(baz&b):_b(b){}
标准::参考包装器;
};
//方案二
结构条{
条(std::引用包装器b):\u b(b){}
标准::参考包装器;
};

我想知道初始化
foo
bar
之间是否有实际区别。如果是的话,每种解决方案的优缺点是什么,应该优先选择哪一种

使用转换运算符的类型至少有区别:

struct tobaz
{
    operator baz&() const { static baz b; return b; }
};
然后

因为只有一个用户可以进行转换

对于带有
运算符std::reference\u wrapper()
的结构,另一侧将发生错误

foo{tobaz()}; // Compile
bar{tobaz()}; // Won't compile