foo=bar和foo{bar}之间的差异

Difference between foo = bar and foo{ bar }

本文关键字:foo bar 之间      更新时间:2024-09-29

我的印象是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 unique_ptr( pointer p ) noexcept;

下一行:

std::unique_ptr<bar> foo = b;

尝试调用上述CCD_ 6的构造函数。由于explicit关键字的原因,对构造函数的调用是无效的。

所以只有这两个会起作用:

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