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

用服务器建立网站吗百度招聘官网首页

用服务器建立网站吗,百度招聘官网首页,b2c商城网站建设 工具,wordpress 不加载cssC 快速回顾(六) 前言一、const_cast二、reinterpret_cast三、dynamic_cast四、static_cast 前言 用于快速回顾之前遗漏或者补充C知识 一、const_cast const_cast主要用于添加或移除const(或volatile)属性。它不改变类型本身&…

C++ 快速回顾(六)

  • 前言
  • 一、const_cast
  • 二、reinterpret_cast
  • 三、dynamic_cast
  • 四、static_cast


前言

用于快速回顾之前遗漏或者补充C++知识


在这里插入图片描述

一、const_cast

const_cast主要用于添加或移除const(或volatile)属性。它不改变类型本身,只改变类型的常量性。注意:移除常量性的操作必须谨慎,因为修改一个原本定义为常量的对象会导致未定义行为。

如下是正常的转换:

class FTestClass
{
public:void Init() {}
};int main()
{const FTestClass* Ptr = new FTestClass();//Ptr->Init();FTestClass* NotConstPtr1 = const_cast<FTestClass*>(Ptr);NotConstPtr1->Init();FTestClass* NotConstPtr2 = (FTestClass*)Ptr;NotConstPtr2->Init();system("pause");return 0;
}

如下是错误的转换

	const int a = 10;int* aa = const_cast<int*>(&a);*aa = 20; // 错误!!! 无法修改std::cout << a; // 这里还是10

二、reinterpret_cast

reinterpret_cast提供低层次的重新解释位模式的转换。它可以将任意指针类型转换为另一个指针类型,或者将指针和整数之间转换。这种转换非常不安全,因为它不进行任何类型检查。通常用于底层编程,如驱动程序和需要直接操作内存的场合。

int main()
{FTestClass* Ptr = new FTestClass();// 转换为int值 再 转换回去int value = reinterpret_cast<int>(Ptr);FTestClass* NewValue1 = reinterpret_cast<FTestClass*>(value);NewValue1->Init();// 转换为int指针 再 转换回去int* IntPtr = reinterpret_cast<int*>(Ptr);FTestClass* NewValue2 = reinterpret_cast<FTestClass*>(IntPtr);NewValue2->Init();system("pause");return 0;
}

三、dynamic_cast

dynamic_cast主要用于在类层次结构中进行安全的向下转换(即基类指针或引用转换为派生类)以及跨继承转换(如多继承中的兄弟类之间的转换)。它需要运行时类型信息(RTTI)支持,因此只能用于多态类型(即类至少有一个虚函数)。如果转换失败,对于指针转换返回nullptr,对于引用转换则抛出std::bad_cast异常。

注意:dynamic_cast 是安全的转换,当转换失败时会返回空指针,并不会变成野指针

class FTestClass
{
public:void BaseFunc(){}//dynamic_cast 必须有虚函数才能转换virtual void Init(){}
};class FTestChildClass : public FTestClass
{
public:void ChildFunc(){}
};int main()
{FTestClass* Ptr = new FTestChildClass();FTestChildClass* ChildPtr = dynamic_cast<FTestChildClass*>(Ptr);ChildPtr->BaseFunc();ChildPtr->ChildFunc();FTestClass* Ptr1 = new FTestClass();FTestChildClass* ChildPtr1 = dynamic_cast<FTestChildClass*>(Ptr1);if (ChildPtr1 == nullptr){printf("is null.\r\n");}system("pause");return 0;
}

四、static_cast

static_cast是最常用的转换,用于非多态类型的转换。它可以在相关类型之间进行转换,比如整数到浮点数,或者指针在类层次结构中的向上转换(即基类指针指向派生类对象,这是安全的)。它也可以用于任何隐式转换的逆转换(例如,将void*转换为其他指针类型,或者将基类指针转换为派生类指针,但后者是不安全的,需要程序员确保安全)

class FTestClass
{
public:void BaseFunc(){printf("Base\r\n");}};class FTestChildClass : public FTestClass
{
public:void ChildFunc(){printf("Child\r\n");printf("%d\r\n", a);}int a = 10;
};int main()
{FTestClass* Ptr = new FTestChildClass();FTestChildClass* ChildPtr = static_cast<FTestChildClass*>(Ptr);ChildPtr->BaseFunc();ChildPtr->ChildFunc();FTestClass* Ptr1 = new FTestClass();FTestChildClass* ChildPtr1 = static_cast<FTestChildClass*>(Ptr1); // 转换失败不会为空,会变成野指针ChildPtr1->BaseFunc();//这里的函数理论上转换失败为什么还能调用?// 是因为函数是在编译时就确定好了,但是如果访问其中的变量值就会出现问题ChildPtr1->ChildFunc();system("pause");return 0;
}
http://www.dtcms.com/wzjs/262618.html

相关文章:

  • 网站上的图片怎么做地推扫码平台
  • 做简历用什么网站百度网盘app官方下载
  • 免费上外国网站的浏览器seo综合查询中的具体内容有哪些
  • 青岛ui设计公司广丰网站seo
  • 枣庄高端网站建设电商运营怎么自学
  • 济宁房产网站建设北京百度seo公司
  • 下载学校网站模板下载地址郴州seo外包
  • 域名注册的网站东莞好的网站国外站建设价格
  • 建设功能网站价格网络营销的推广方法有哪些
  • app产品网站模板免费下载seo网站有优化培训班吗
  • 深圳网络推广培训中心seo学徒
  • 网站如何做的看起来高大上seo排名计费系统
  • 中华人民建设部网站口碑营销的产品有哪些
  • 做宴会网站官方网站营销
  • 网站运营难做吗杭州优化排名哪家好
  • 本地服务器搭建wordpress遵义网站seo
  • 手机能看的网站有哪些产品推广介绍
  • 设计导航精选最好的设计网站大全邯郸seo
  • 企业网站产品分类多怎么做seo线上营销
  • 个人做外贸哪个平台好郑州seo排名工具
  • 阿雷网站建设公司推广赚佣金的软件排名
  • 手机照片做成音乐相册网络seo营销推广
  • 做纸箱在什么网站找客户seo排名策略
  • 智能建站系统个人网站百度地图优化排名方法
  • 深圳做分销网站免费换友情链接
  • 佛山自己网站建设app拉新任务平台
  • 模板之家网页模板aso优化是什么
  • 电子商务网站建设备案须知友情链接的作用有哪些
  • 网站后台建设杭州排名优化软件
  • java做网站用什么软件最牛餐饮营销手段