龙空技术网

C语言类型转换与C++类型转换

假如冬天不冷 66

前言:

目前我们对“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语言自定义的类型是什么意思