Kap*_*pil 2 c++ casting constants unique-ptr c++11
我正在尝试 const_cast unique_ptr 它给了我错误:
const std::unique_ptr<int> myptr;
std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int> >(myptr));
Run Code Online (Sandbox Code Playgroud)
所以我想了解为什么 const_cast 不能与 unique_ptr 一起使用,如果它可以与普通指针一起使用?
您可以 const 强制转换 unique_ptr。您不能做的是从 const unique_ptr 移动,而这正是您的代码尝试执行的操作。不过你可以这样做:
vec.push_back(std::move(const_cast<std::unique_ptr<int>&>(myptr)));
Run Code Online (Sandbox Code Playgroud)
当然,这是未定义的行为,因为您的 unique_ptr 实际上是 const。如果myptr是对 unique_ptr 的 const 引用,而它实际上不是 const,那么上面的代码是安全的。
在你的新代码中
std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int> >(myptr));
Run Code Online (Sandbox Code Playgroud)
const 强制转换myptr在将结果传递给 之前尝试进行复制std::move。您需要将其转换为引用才能不复制它。
std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int>& >(myptr));
// ^
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2351 次 |
| 最近记录: |