![](/img/trans.png)
[英]A mysterious compilation error: cannot convert from 'const boost::shared_ptr<T>' to 'const boost::shared_ptr<T>'
[英]convert from boost::shared_ptr<T> to boost::shared_ptr<const T>
class T
{};
class UseT
{
public:
//...
boost::shared_ptr<const T> getT() const
{
return m_t;
}
private:
boost::shared_ptr<T> m_t;
};
問題>當我們從boost::shared_ptr<T>
轉換為boost::shared_ptr<const T>
時使用的規則是什么?
shared_ptr<T>
有一個轉換構造函數,允許它從shared_ptr<U>
構造,如果從U*
轉換為T*
是有效的,鏡像內置指針的工作方式。
template<typename U>
shared_ptr(const shared_ptr<U>& other);
(對於std::shared_ptr
,只有在U*
可轉換為T*
才能調用構造函數,但對於boost::shared_ptr
我不確定它是否會檢查,或者您只是因無效轉換而出現編譯錯誤。)
由於T*
可以轉換為const T*
,因此構造函數允許您從shared_ptr<T>
創建shared_ptr<const T>
shared_ptr<T>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.