前言:
目前我们对“c语言说明一种新的类型名”可能比较着重,我们都需要学习一些“c语言说明一种新的类型名”的相关文章。那么小编同时在网摘上网罗了一些对于“c语言说明一种新的类型名””的相关知识,希望大家能喜欢,我们一起来了解一下吧!C语言中的类型转换
1、隐式转换:可以转换基础类型,指针类型不能隐式类型转换
示例:
int a = 48;char c = a;
2、强制类型转换:
char p1[] = "abcd";int* p2=(int*)p1;C++中的类型转换
在C++中一共提供了4种类型转换,他们分别是
1、static_cast:静态类型转换,对应于C语言中的隐式类型转换场景,可以转换基础数据类型,但是不能转换指针类型。该类型转换会在编译时进行类型检查。
示例:
double pi = 3.1415926; int a = (int)pi; //c语言的旧式类型转换 int b = pi; //隐式类型转换 int c = static_cast<int> (pi); //c++的新式的类型转换运算符
2、reinterpret_cast:重新解释类型,可用于转换指针,但是不能转换基础数据类型
示例:
char p[] = “reinterpret_cast”;int* p=reinterpret_cast<int*>(p);
3、dynamic_cast:动态类型转换,会进行动态类型检查,应用场景是在多态场景中(子类对象传给父类指针或引用),可以动态检查子类的类型。
示例:
class Animal{public: virtual void print(){ std::cout << "print print" << std::endl; } virtual ~Animal(){ }};class Cat: public Animal{public: void print() override{ std::cout << "print Cat" << std::endl; }};class Dog:public Animal{ void print() override{ std::cout << "print Dog" << std::endl; }};int main() { Animal *animal = new Cat(); Dog *dog = dynamic_cast<Dog*>(animal); // 如果转换失败会返回空指针 if(nullptr == dog){ std::cout << "转换失败" << std::endl; } Cat *cat = dynamic_cast<Cat*>(animal); if(cat){ std::cout << "转换成功" << std::endl; } return 0;}
4、const_cast:常类型转换又叫脱常转换,意思就是可以将一个const变量转换成一个非const变量
示例:
void func(int & a){ std::cout << "func---a:" << a << std::endl; a = 100; // 这里改变了引用的值,会起作用吗?需要看传递进来的变量是否是const的}int main() { const int d = 30; func(const_cast<int &>(d)); // 如果在func中修改了d的值,会起作用吗?不会 std::cout << "d:" << d << std::endl; return 0;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言说明一种新的类型名 #c语言自定义的类型 #c语言自定义的类型是什么意思