foo = bar 和 foo{ bar } 之间的区别

Difference between foo = bar and foo{ bar }

我的印象是 foo = barfoo{ bar } 都做了同样的事情,这只是一个偏好问题,但在我的代码中 foo = bar 给出了一个错误但是 foo{ bar } 没有:

std::vector<std::unique_ptr<bar>> bars;

bar& myFunction() {

    bar* b = new bar();
    std::unique_ptr<bar> foo{ b }; //works fine
    std::unique_ptr<bar> foo = b; //error
    bars.emplace_back(std::move(foo));

    return *b;

}

知道为什么会这样吗?

第二个不起作用,因为 unique_ptr 有一个 explicit constructor:

explicit unique_ptr( pointer p ) noexcept;

下一行:

std::unique_ptr<bar> foo = b;

尝试调用 std::unique_ptr 的 above-mentioned 构造函数。由于 explicit 关键字,对构造函数的调用无效。

所以只有这两个可以工作:

std::unique_ptr<bar> foo { b };
std::unique_ptr<bar> foo ( b ); // or this