Tôi đã cố gắng giới thiệu một số độ chính xác const
(thực tế là mô hình chức năng) cho một số mã mới và thấy rằng tôi không thể chuyển một số std::shared_ptr<A>
đến một hàm mong đợi một std::shared_ptr<A const>
. Lưu ý rằng tôi không muốn bỏ cách xa constness nhưng giới thiệu nó, hợp pháp với các con trỏ thô.Tại sao không shared_ptr <A> chuyển đổi ẩn thành shared_ptr <A const>?
Có cách nào để giải quyết vấn đề này không? Tôi đã không tìm thấy một thành viên chức năng để làm điều này.
Các lỗi chính xác thốt ra bởi g ++ 4.6.1 là:
error: no matching function for call to ‘foo(std::shared_ptr<A>)’
note: candidate is:
note: template<class T> std::shared_ptr<_Tp> foo(std::shared_ptr<const _Tp>)
'std :: static_pointer_cast (p) 'là một cách để thực hiện chuyển đổi một cách rõ ràng. –
@Luc: Tại sao không 'std :: const_pointer_cast (p)'? –
Xeo
@Xeo Vì chúng tôi không loại bỏ cv-vòng loại. –