C++ 为什么const_cast不允许用于unique_ptr?
我正在尝试const_cast unique_ptr,但它给了我错误:C++ 为什么const_cast不允许用于unique_ptr?,c++,c++11,casting,constants,unique-ptr,C++,C++11,Casting,Constants,Unique Ptr,我正在尝试const_cast unique_ptr,但它给了我错误: const std::unique_ptr<int> myptr; std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int> >(myptr)); 所以我想了解为什么const_cast不能与unique_ptr一起工作,如果它可以与普通指针一起工作的话?您可以const cast一
const std::unique_ptr<int> myptr;
std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int> >(myptr));
所以我想了解为什么const_cast不能与unique_ptr一起工作,如果它可以与普通指针一起工作的话?您可以const cast一个unique_ptr。您不能做的是从const unique_ptr移动,这是您的代码试图做的。您可以这样做:
vec.push_back(std::move(const_cast<std::unique_ptr<int>&>(myptr)));
const cast在将结果传递给std::move之前尝试复制myptr。您需要将其强制转换为引用才能不复制它
std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int>& >(myptr));
// ^
您可以const cast一个唯一的\u ptr。您不能做的是从const unique_ptr移动,这是您的代码试图做的。您可以这样做:
vec.push_back(std::move(const_cast<std::unique_ptr<int>&>(myptr)));
const cast在将结果传递给std::move之前尝试复制myptr。您需要将其强制转换为引用才能不复制它
std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int>& >(myptr));
// ^
当然,你不能从一个const对象移动:move需要修改源代码,以便从中窃取资源。这意味着我不能拥有const std::unique_ptr的vector,对吗?我很确定你确实不能。vector的元素必须是可复制的或可移动的,而const unique_ptr两者都不是。你也不能有const int的向量。当然,你不能从const对象移动:move需要修改源,为了从中窃取资源。这意味着我不能拥有const std::unique\u ptr的向量,对吗?我很确定你确实不能。vector的元素必须是可复制的或可移动的,const unique\u ptr两者都不是。您也不能有const int的向量。@Kapil:是的。我们可以。您不能做的是复制一个唯一的\u ptr,这是您的新代码试图做的;不compile@Kapil:因为它仍在尝试复制const_cast自身中的唯一\u ptr。您需要将其强制转换为引用。@Kapil:e.std::unique\u ptr myptr1=std::moveconst\u castmyptr;新代码中的建议仍然是修改常量的未定义行为object@Kapil:是的。我们可以。您不能做的是复制一个唯一的\u ptr,这是您的新代码试图做的;不compile@Kapil:因为它仍在尝试复制const_cast自身中的唯一\u ptr。您需要将其强制转换为引用。@Kapil:e.std::unique\u ptr myptr1=std::moveconst\u castmyptr;新代码中的建议仍然是修改常量对象的未定义行为