namespace std {
template <class T, class U>
shared_ptr<T> const_pointer_cast(const shared_ptr<U>& r) noexcept; // (1) C++11
template <class T, class U>
shared_ptr<T> const_pointer_cast(shared_ptr<U>&& r) noexcept; // (2) C++20
}
概要
shared_ptr
で管理するインスタンスに対して const_cast
を行う。
戻り値
r
が空であった場合、この関数は空のshared_ptr<T>
を返却する。-
(1) :
return shared_ptr<T>(r, const_cast<typename shared_ptr<T>::element_type*>(r.get()));
-
(2) :
備考
shared_ptr<T>(const_cast<T*>(r.get()))
という方法は未定義動作となるので使用しないこと。
例外
投げない
例
#include <memory>
#include <iostream>
int main()
{
std::shared_ptr<const int> cp(new int(3));
std::shared_ptr<int> p = std::const_pointer_cast<int>(cp);
std::cout << *p << std::endl;
}
出力
3
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅
- GCC: 4.3.6 ✅
- ICC: ??
- Visual C++: 2008 (TR1) ✅, 2010 ✅, 2012 ✅, 2013 ✅