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

找建筑工作哪个网站好西安互联网推广公司

找建筑工作哪个网站好,西安互联网推广公司,县政府网站集约化建设情况,直播网站开发平台目录 强制转换 static_cast const_cast reinterpret_cast dynamic_cast const关键字 修饰内置类型* 修饰指针类型* 类比 数组指针 指针数组 函数指针 指针函数 强制转换 C语言中的强制转换在C代码中依然可以使用,这种C风格的转换格式非常简单 TYPE a …

目录

强制转换

static_cast

const_cast

reinterpret_cast

dynamic_cast

const关键字

修饰内置类型*

修饰指针类型*

类比

数组指针

指针数组

函数指针

指针函数


强制转换

C语言中的强制转换在C++代码中依然可以使用,这种C风格的转换格式非常简单

TYPE a = (TYPE)EXPRESSION;

但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传统的c语言风格的类型转换没有区分这些。

另一个缺点就是,c风格的转换不容易查找,它由一个括号加上一个标识符组成,而这样的东西在c++程序里一大堆。c++为了克服这些缺点,引进了4个新的类型转换操作符,他们是static_cast,const_cast,dynamic_cast,reinterpret_cast.

static_cast

最常用的类型转换符,在正常状况下的类型转换, 用于将一种数据类型转换成另一种数据类型,如把int转换为float

使用形式

目标类型 转换后的变量 = static_cast<目标类型>(要转换的变量)

好处:不允许非法的转换发生;方便查找

int iNumber = 100;
float fNumber = 0;
fNumber = (float) iNumber;//C风格
fNumber = static_cast<float>(iNumber);

也可以完成指针之间的转换,例如可以将void*指针转换成其他类型的指针

void * pVoid = malloc(sizeof(int));
int * pInt = static_cast<int*>(pVoid);
*pInt = 1;

不能完成任意两个指针类型间的转换

int iNumber = 1;
int * pInt = &iNumber;
float * pFloat = static_cast<float *>(pInt);//error

image-20240306101859345

总结,static_cast的用法主要有以下几种:

1)用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性需要开发人员来保证;

2)把void指针转换成目标类型的指针,但不安全;

3)把任何类型的表达式转换成void类型;

4)用于类层次结构中基类和子类之间指针或引用的转换(后面学)。

const_cast

该运算符用来修改类型的const属性,基本不用

常量指针被转化成非常量指针,并且仍然指向原来的对象;

常量引用被转换成非常量引用,并且仍然指向原来的对象;

常量对象被转换成非常量对象。

const int number = 100;
int * pInt = &number;//error  数据类型不同
int * pInt2 = const_cast<int *>(&number); // 转化后数据类型相同

image-20250311140958448

dynamic_cast:该运算符主要用于基类和派生类间的转换,尤其是向下转型的用法中(后面讲)

image-20240306102746004

reinterpret_cast

功能强大,慎用(也称为万能转换)

该运算符可以用来处理无关类型之间的转换,即用在任意指针(或引用)类型之间的转换,以及指针与足够大的整数类型之间的转换。由此可以看出,reinterpret_cast的效果很强大,但错误的使用reinterpret_cast很容易导致程序的不安全,只有将转换后的类型值转换回到其原始类型,这样才是正确使用reinterpret_cast方式

dynamic_cast

该运算符主要用于基类和派生类间的转换,尤其是向下转型的用法中(后面讲)

const关键字

修饰内置类型*

const int number1 = 10;
int const number2 = 20;const int val;//error 常量必须要进行初始化

const修饰的变量称为常量,之后不能修改其值

char/short/int/long/float/double 整型、浮点型数据都可以修饰——const常量

image-20240305160726932

除了这种方式可以创建常量外,还可以使用宏定义的方式创建常量

#define NUMBER 1024

由此引出一个面试常考题

const常量和宏定义常量的区别

  1. 发生的时机不同:C语言中的宏定义发生时机在预处理时,做字符串的替换;

    const常量是在编译时(const常量本质还是一个变量,只是用const关键字限定之后,赋予只读属性,使用时依然是以变量的形式去使用)

  2. 类型和安全检查不同:宏定义没有类型,不做任何类型检查;const常量有具体的类型,在编译期会执行类型检查。

    在使用中,应尽量以const替换宏定义,可以减小犯错误的概率。

修饰指针类型*

三种形式:const int * p int const * p1 int * const p2

int number1 = 10;
int number2 = 20;
const int * p1 = &number1;//常量指针
*p1 = 100;//error 通过p1指针无法修改其所指内容的值
p1 = &numbers;//ok 可以改变p1指针的指向
int const * p2 = &number1; //常量指针的第二种写法
int * const p3 = &number1;//指针常量
*p3 = 100;//ok 通过p3指针可以修改其所指内容的值
p3 = &number2;//error 不可以改变p1指针的指向
const int * const p4 = &number1;//两者皆不能进行修改
// const 左定值,右定向
// const 在*号的左面 ,就是指针指向的是一个定值
const int * p1 = &number1;//常量指针
*p1 = 100;//error 通过p1指针无法修改其所指内容的值
p1 = &numbers;//ok 可以改变p1指针的指向
// const 在*号的右面,就是指针的指向不能变是一个定向指针
int * const p3 = &number1;//指针常量
*p3 = 100;//ok 通过p3指针可以修改其所指内容的值
p3 = &number2;//error 不可以改变p1指针的指向
const int * const p4 = &number1;//两者皆不能进行修改
// 左定值的本质是值不变,只读,可以理解为将一个权限大的a(可读可写)的权限缩小了,且权限只能缩小不能增大
int a = 1;
int const *p = a;
// *p = 2; // error
a = 2; //right
//权限放大的例子
//int & p2 = 1;
// 1是const的对象,左面为可读可写权限放大了,普通对象可读可写

理解常量指针和指针常量的区别(重点)

image-20240305162038086

image-20240305162058459

类比

与这组概念相似的,再补充两组对比,也应该理解其含义,尝试写代码,分辨一下:

数组指针

image-20240305162935055

指针数组

image-20240305162945198

函数指针

image-20240305163409219

指针函数

image-20240305163701593

http://www.dtcms.com/wzjs/413422.html

相关文章:

  • 做网站的时候表格怎么去掉市场营销公司
  • html5模板之家百度seo简爱
  • 学校html网站模板代码seo实战培训学校
  • 淇县网站设计公司国外网站推广平台有哪些?
  • wordpress怎么播放视频播放器西安seo服务外包
  • 网站信息资源建设排名优化
  • 投资网站建设写软文一篇多少钱合适
  • 网页游戏排行榜前十名wangyi广州seo推广
  • 内容网站 如何做采集线上推广怎么做
  • 视频优化网站怎么做网络服务电话
  • 如何做h5商城网站百度网盘登录入口 网页
  • 重庆网站制作开发推广新产品最好的方法
  • 网站开发视频如何节省流量搜索指数查询
  • 只做百度移动端网站可以吗网络营销以什么为中心
  • 自学网页设计的网站免费网站代理访问
  • dedecms怎么关闭网站百度在线客服中心
  • 做外单网站有哪些海外网站seo优化
  • 网站建设价格标准渠道阿里巴巴关键词排名优化
  • 网站怎么做微信支付宝支付站长工具网站测速
  • 柳州企业网站开发公司seo优化好做吗
  • 快速做网站流量数据统计分析广州关键词快速排名
  • 办公用品网站建设市场定位谷歌paypal官网下载
  • 网站音乐播放器插件创建网站要钱吗
  • 新手建网站推荐网络营销推广手段
  • cms网站建设有多少条数据女生做sem还是seo
  • 能看wap软件seo的工作流程
  • 清河做网站如何自己创造一个网站平台
  • 路桥网站建设公司成都网站seo技术
  • 县政府门户网站建设热门网站
  • 国外响应式网站模板网站排名大全