0

考虑以下代码:

//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;
};

我想知道初始化foobar. 如果是这样,每种解决方案的优缺点是什么,应该首选哪个?

4

1 回答 1

1

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

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

然后

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

因为只能发生一个用户转换。

演示

struct with 的另一侧会发生错误operator std::reference_wrapper<baz>()

于 2019-01-08T22:00:15.230 回答