1、std::static_pointer_cast():当指针是智能指针时候,向上转换,用static_cast 则转换不了,此时需要使用static_pointer_cast。 2、std::dynamic_pointer_cast():当指针是智能指针时候,向下转换,用dynamic_cast 则转换不了,此时需要使用dynamic_pointer_cast(此处注意:base基类需要至少有一个virtual成员函数(即多态类...
static_pointer_cast从表面上看就是静态指针类型转换。细细看来,并不是那么简单,有一个隐形的限制条件。首先这个是c++11里的,更老的编译器可能不支持,其次指针是shared_ptr类型的,对于普通指针是无效的。还有一般只用在子类父类的继承关系中,当子类中要获取父类中的一些属性时(当然了子类通过多态拥有自己的父类继...
(1)static_cast 用法:static_cast < type-id > ( exdivssion ) 该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类和子类之间指针或引用的转换。 a. 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; b. 进行下行转换...
可以用 dynamic_cast 执行安全的向下转型。 3) 若新类型 是右值引用类型,则 static_cast 将泛左值、类纯右值或数组纯右值 (C++17 前)任何左值 (C++17 起) 表达式 的值转换为与该表达式指代相同对象,或指代其基类子对象(取决于 新类型)的亡值。若目标类型是表达式的不可访问或有歧义基类,则程序非良构。若...
C风格显式转换(C style explicit conversion) 要去掉上述waring很简单,熟悉C语言的程序员知道,有两种简单的写法(C风格转换与函数风格转换): double a=2000.3; short b; b = (short) a; // c-like cast notation b = short (a); // functional notation ...
七十八、static_cast和dynamic_cast,static_poonter_cast和dynamic_pointer_cast区别,一、static_cast和dynamic_cast区别:1、static_cast:向上转换,例如:基类向派生类转换2、dynamic_cast:向下转换,例如
static_cast 不执行运行时类型检查(这是 dynamic_cast 的工作),因此在进行向下转换时,如果转换不安全...
若dp和p是相同地址的话,那么我们区分dp和p呢?其实你已经得到了答案,即dp和p应该指向的地址值不变...
static_pointer_cast<T>(p); ``` 其中,T是目标类型,p是待转换的指针或引用。static_pointer_cast的语义是执行一次类型转换,将p转换为T类型的指针或引用。 在源码解析之前,我们需要了解C++的类型系统和编译器实现。C++的类型系统包括类型别名、类型兼容性、类型转换等概念,而编译器实现则涉及到语法分析、语义分析...