C++的static_cast怎么使用

发布时间:2021-11-26 15:13:11 作者:iii
来源:亿速云 阅读:322

这篇文章主要介绍“C++的static_cast怎么使用”,在日常操作中,相信很多人在C++的static_cast怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的static_cast怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

假设有以下继承关系。

class Animal
{
};
class Dog : public Animal
{
};
class Cat : public Animal
{
};

我们首先进行简单的准备

Dog* dog = new Dog();
Animal* animal = dog;

派生类类型的指针赋值给基类类型指针是不需要类型转换的,因为:

 Dog is a Animal

同理,因为上述判断不能成立,下面的转换需要使用static_cast。

Cat* cat1 = static_cast<Cat*>(dog);  //例1,NG

这一行会有编译错误,当然原因也应该好理解,因为Dog is not a Cat。接下来看下一个例子。

Dog* sdog = static_cast<Dog*>(animal);   //例2,OK

也许你会说没有问题,因为animal指向的本来就是Dog嘛。

但是,请看下一个例子。

Cat* cat2 = static_cast<Cat*>(animal);   //例3,OK???

虽然animal指向的是Dog对象,还是可以通过编译。

哪里错了?

例2的理解错了,animal实际指向的对象是什么,程序执行以后才知道(动态),static_cast只会进行静态检查,即

    Dog转换Cat可以么?不行,编译错误。

    Animal转换为Dog可以么?可能行,编译通过

    Animal转换为Cat可以么?可能行,编译通过

结论:staitc_cast可以对转换进行静态检查,帮我们查出一部分错误。

古人说:勿以恶小而为之,勿以善小而不为

发现错误当然越早越好,更何况是自动在便宜阶段。

如果不用强制类型转换当然更好。如果做不到,先从正确使用static_case/dynamic_cast/const_cast/reinterpret_cast开始吧。

到此,关于“C++的static_cast怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. dynamic_cast和static_cast的异同
  2. error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ static_cast

上一篇:如何实现一键自动安装Docker

下一篇:C#如何实现基于Socket套接字的网络通信封装

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》