1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
1、static_cast:向上转换,例如:基类向派生类转换 2、dynamic_cast:向下转换,例如:派生类向基类转换 二、static_poonter_cast和dynamic_pointer_cast区别同上,不过这两个只适用于智能指针
若r 为空,则新的 shared_ptr 亦然(但其存储指针不必为空)。否则,新的 shared_ptr 将与r 的初始值共享所有权,除了若 dynamic_pointer_cast 所进行的 dynamic_cast 返回空指针,则为它空。 令Y 为typename std::shared_ptr<T>::element_type ,则将分别通过求值下列表达式,获得生成 std::shared_ptr 的存储...
输出结果是:Null pointer on second type-cast 两个dynamic_cast都是下行转换,第一个转换是安全的,因为指向对象的本质是子类,转换的结果使子类指针指向子类,天经地义;第二个转换是不安全的,因为指向对象的本质是父类,“指鹿为马”或指向不存在的空间很可能发生! 最后补充一个特殊情况,当待转换指针是void*或者转...
2。static_cast:编译时检查,用于非多态的转换,可以转换指针及其他,比如:int->float还可以逆隐式转换,比如:比如:int->char。It is left to the programmer to ensure that the results of astatic_castconversion are safe. 3。对于指针的转换:Thedynamic_castandstatic_castoperators move a pointer throughout ...
5,6)若非const_cast<T*>((U*)nullptr)良构则行为未定义。 7,8)若非reinterpret_cast<T*>((U*)nullptr)良构则行为未定义。 调用右值重载(2,4,6,8)后,r为空且r.get()==nullptr,但对于dynamic_pointer_cast(4),若dynamic_cast失败则不修改r。
1. 解释std::static_pointer_cast的基本概念 std::static_pointer_cast 是C++11 引入的一个模板函数,用于智能指针(如 std::shared_ptr 或std::weak_ptr)之间的类型转换。这种转换是编译时的强制转换,不会在运行时进行检查,类似于 static_cast,但专门用于智能指针,确保转换后的指针仍然保留智能指针的内存管理功能...
int i = 13; void *p = &i; auto *pi = static_cast<int*>(p); 对于函数,我们必须使用reinterpret_cast两次: #include<iostream> using any_fcn_ptr_t = void(*)(); void print(int i) { std::cout << i <<std::endl; } int main() { //Create type-erased pointer to function: auto...
1、C++中的static_cast执行非多态的转换,用于代替C中通常的转换操作。因此,被做为隐式类型转换使用。比如:int i;float f = 166.7f;i = static_cast<int>(f);此时结果,i的值为166。2、C++中的reinterpret_cast主要是将数据从一种类型的转换为另一种类型。所谓“通常为操作数的位模式提供较...
从基类转型为派生类,应该使用dynamic_pointer_cast。因为从基类转型为派生类是不安全的,在运行时需要...