foo = bar 和 foo{ bar } 之间的区别
Difference between foo = bar and foo{ bar }
我的印象是 foo = bar
和 foo{ 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
我的印象是 foo = bar
和 foo{ 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