当前位置: 首页 > news >正文

c++ static_cast用法

static_cast类型转换运算符,意思是静态转换,在编译期检查能否转换成功,失败会编译报错。

主要用于基本类型数据转换、void*和其他类型指针转换,以及指针类型间转换。

测试代码:

void testTypeCast(void) {// test static_cast 静态转换,即编译期间转换// 1、基本数据类型转换float f = 1.03;double d = (double)f;d = static_cast<double> (f);std::cout << "d = " << d << endl << endl; // d = 1.03// 转换失败则编译报错//int* p = static_cast<int*> (f); // 编译报错:类型转化无效。// 2、void指针和其他类型指针转换int i = 9527;int* p = &i;void* p2 = static_cast<void*>(p);unsigned* p3 = static_cast<unsigned*>(p2);*p3 = 250;std::cout << "i = " << i << endl << endl; // i = 250//char* c = static_cast<char*>(p3); // 编译报错:类型转化无效。// 3、指针或引用的向上转化class Base {public:string name;virtual void func() {std::cout << "调用基类func函数, name: " << name << endl;}};class Sub : public Base {public:int age;Sub() :age(0) {}void func() override {std::cout << "调用子类func函数, name: " << name << ",age: " << age << endl;}int getAge() const {return age;}};Sub sub;sub.name = "代号9527";sub.age = 18;// 向上转换std::cout << "test 指针向上转换:" << endl;Base* basePtr = static_cast<Base*>(&sub);std::cout << "转换为基类指针后, name: " << basePtr->name << endl << endl; // 转换为基类指针后, name: 代号9527std::cout << "再转换回来,查看数据还是完整的,不会丢失数据:" << endl;Sub* subPtr = static_cast<Sub*>(basePtr);std::cout << "再转换回子类指针后,name: " << subPtr->name << ", age: " << subPtr->age << endl << endl; // 再转换回子类指针后,name: 代号9527, age: 18// 再测试下,指针类型向下转换是否可以std::cout << "test 指针向下转换:" << endl;Base base;base.name = "金毛狮王";subPtr = static_cast<Sub*>(&base); // 可以这么转化,但是没意义。std::cout << "测试指针向下转换,name: " << subPtr->name << ", age: " << subPtr->age << endl << endl; // 测试指针向下转换,name: 金毛狮王, age: -858993460// 测试对象直接赋值Sub sub2;sub2.age = 22;sub2.name = "狗哥";Base base2 = sub2; // 内存拷贝,基类变量数量少,会丢失子类age变量的值。下面验证:Sub* sub3Ptr = static_cast<Sub*>(&base2);std::cout << "赋值后, name: " << sub3Ptr->name << ", age:  " << sub3Ptr->age << endl;
}

打印:

ok. 

http://www.dtcms.com/a/467226.html

相关文章:

  • 广东省建设工程总监扣分查询网站无极网络
  • 龙华建设网站公司wordpress 3.7
  • 淘宝客怎么做自己的网站学习做网站的网站
  • 手机百度网站证书过期外贸网站推广方法之一
  • 网站登录后不显示内容试玩网站设计建设
  • Visual Basic.NET 关键词
  • 数据结构--------树二叉树
  • 郑州网站开发培训班o2o网站系统建设
  • Lampiao渗透项目学习记录
  • 新功能来袭——支持导出MIDI文件,AI音乐从此进入新篇章
  • 网站推广活动方案权威网站排名
  • Google 智能体设计模式:工具使用(函数调用)
  • 网站开发的技术类型有哪些网络服务代码1001
  • Redis-string
  • 网站网页的收录数量赤峰建设厅官方网站
  • 做灯箱的网站wordpress nginx apache
  • (7)100天python从入门到拿捏《迭代器和生成器》
  • 花卉网站建设策划书核酸二维码
  • 00--VSCode配置
  • 光明区建设局网站抖音代运营成功案例
  • 宁波论坛建站模板珠海市建设工程信息网
  • 温州做网站价格外贸推广软件
  • 自己建的网站也要注册域名吗电子商务网站建设与维护试卷答案
  • Java项目:基于SSM框架实现的连锁干洗店管理系统(ssm+B/S架构+源码+数据库+毕业论文)
  • 国外装饰公司网站郑州网站seo厂家
  • 如何建立免费个人网站盘龙区网站建设外包
  • 供热设施网站搭建教程品牌推广名词解释
  • 算法社Python基础入门面试题库(新手版·含答案)
  • 网站建设与管理 自考wordpress邮箱社交
  • Day59 SPI驱动与ADXL345传感器应用及Linux系统移植基础