Primer笔记——显式转换、返回数组指针的函数、const形参函数重载
admin
2024-02-26 21:55:39
0

目录

一.P144 显式转换

①static_cast

②const_cast

③reinterpret_cast

二.P205 声明一个返回数组指针的函数

①普通写法:

② 尾置返回类型(C++11)

③decltype写法 

④类型别名写法(个人比较推荐)

三.P208 重载和const形参


顶层const:指针本身是const属性(常量指针),例:int const* p;

底层const:指针指向const类型对象空间(指向常量的指针),例:const int* p;

一.P144 显式转换

①static_cast

static_cast<转换类型>(实参);

只要不是底层const都可以通过该函数转换。

该函数可以用来找回存于void*指针中的值

值得注意,如果指针转化后类型并不是数据本身类型,也会报错,结果未定义。

int a = 3;
char b = static_cast(a);//类型缩小
void* c = &a;
char* d = static_cast(c);//找回值
int* e = &a;
char* f = static_cast(e);//报错,结果未定义

②const_cast

const_cast<转换类型>(实参);

该函数用来去掉顶层const或底层const(可都去掉)。

这是一种非常暴力的行为,会直接去掉const属性获得写权限。如果是常量对象,进行写操作将产生未定义后果。

int a = 3;
const int* const b = &a;
int* d = const_cast(b);//去掉顶层const与底层const

③reinterpret_cast

 reinterpret_cast<转换类型>(实参);

可以将指针数据给指向不同类型的指针,新的指针会认为指向对象是转换后类型。

int a = 3;
int* b = &a;
char* d = reinterpret_cast(b);//正确
char* e = static_cast(b);//错误

《C++ Primer》不建议使用reinterpret_cast,它会改变类型而且不报警告,十分危险。 

二.P205 声明一个返回数组指针的函数

数组指针:形如 int (*a)[10],本质是一个指针,指向数组。

函数形式如下:

类型 (*函数 (形参) ) [数组大小]

 举例:

int (*func(int i))[10];

分析:

func(int i)说明这是一个函数,参数为int i。

(*func(int i)):可对函数进行解引用操作,说明返回值是一个指针。

 (*func(int i))[10]:说明指针指向对象是长度为10的数组。

 int (~)[10]:说明指针指向的数组类型为整形。

拓展:

参数为string数组指针的引用的函数,返回值是string数组指针的引用。

四种形式:

①普通写法:

string (&func(string (&str)[10]))[10]
{//...return str;
}

 剖析:

返回类型  返回的是一个引用  参数类型   参数是一个引用  参数对象是长度10的数组   函数返回的引用的对象是数组
string   (  &func         (string     (&str)        [10])  )                 [10];

② 尾置返回类型(C++11)

auto func(string (&str)[10])->string (&)[10]
{//...return str;
}

③decltype写法 

string a[10];decltype(a)&func(string (&str)[10])
{//...return str;
}

④类型别名写法(个人比较推荐)

using RET = string(&)[10];
RET func(RET str)
{//...return str;
}

三.P208 重载和const形参

使用函数重载时,顶层const不能进行重载,底层可以。

原因:传入指针实参时,常量指针和普通指针都能被常量指针指针接收。但指向常量的指针不能被普通指针形参接收,只能被指向常量的指针形参接受。

void func(int* p) {}
void func(const int* p) {}//正确重载
void func(int* const p) {}//错误重载

如有错误,敬请斧正

相关内容

热门资讯

辽宁朝阳整形医院电话号码大揭秘... 嘿,朋友们!今天咱们聊点紧急的事儿——辽宁朝阳整形医院的电话号码!你可别小看这串数字,关键时刻能救急...
wine linux 64位下... 嘿,各位科技潮人们,今天咱们要聊的可是一件超级酷炫的事儿——WineLinux64位下载!是不是听起...
上海优化设计公司:创意狂人打造... 在上海这个国际大都市的心脏地带,有一群不按常理出牌的创意狂人,他们就是上海优化设计公司的灵魂。这里不...
北京重名查询成大麻烦,同名现象... 嘿,大家好!今天咱们聊聊北京这地儿的一个小麻烦——重名查询!你知道吗,在北京,同一个名字可能会出现在...
wine 64位下载-Wine... 大家好,今天咱们来聊聊这个让人又爱又恨的Wine64位下载!是不是有时候看着那些经典的老游戏,心里痒...
oa网上办公系统破解版-OA ... 嘿,朋友们,今天咱们聊聊那些在网络上满天飞的OA网上办公系统破解版。你可能觉得,哇塞,免费的午餐,这...
ubuntu 14.04 安装... 嘿,朋友们!今天我们要一起玩个超级酷的游戏——安装Ubuntu14.04!是不是听起来就让人兴奋得跳...
壁虎数据恢复如何root-手机... 大家好,我是个对手机Root这事特别有热情的家伙,今天就来跟大家聊聊壁虎数据恢复怎么玩Root。先说...
朝阳市第四医院电话:生命的守护... 哎呀,说到朝阳市第四医院的电话,我的心就扑通扑通跳!你知道吗,那个电话号码,简直就是生命的守护神啊!...
2024联想xp系统下载-20... 大家好!今天我要说的这个话题,简直是我的心头好——2024年联想XP系统的下载!你们有没有遇到过那种...
如何把百度地图制作成mapin... 大家好,我是一个对地图有着无限热情的家伙,今天咱们就来聊聊怎么把那个常用的百度地图变成专业的MapI...
loic攻击原理-揭秘 Loi... 嘿,朋友们,今天咱们聊聊那个让人闻风丧胆的Loic攻击,这玩意儿简直就是网络世界里的“炸弹”!Loi...
ubuntu jdk7 64位... 嘿,大家好!今天咱们聊聊在Ubuntu上下载JDK7 64位的那些事儿。哎,这可不是件容易的事儿,但...
ecosystem diagr... 在这个五彩斑斓的世界里,生态图谱就像是一幅神奇的拼图,每一块都充满了生命的故事。想象一下,森林里的每...
数据丢失不再怕,迅龙恢复数据服... 在这个数字化飞速发展的时代,我们的生活中充斥着各种数据——照片、文档、聊天记录,它们是我们记忆的一部...
nuke怎么输出-Nuke 软... 哎呀,今天真是倒霉透顶了,我那个nuke软件,怎么就是不乖乖听话呢?我明明按照那些教程一步一步来的,...
ジレンマ银魂;银魂op2-ec... 嘿,各位银魂的铁粉们!今天咱们就来聊聊那个让我们又笑又哭的《银魂》OP2——"Pray"。这首歌,简...
win7旗舰版安装教程-电脑新... 嘿,亲爱的电脑新手们,今天我要带你们一起飞跃到Win7的神奇世界!别担心,即使你是个电脑小白,跟着我...
freertos stm32 ... 哎呀,今天真是激动得不得了!你们知道吗,我刚刚在我的STM32小宝贝上成功移植了FreeRTOS,这...
windos7怎么设置文件快捷... 哎呀,说到在Windows7里设置文件快捷键,这可真是个超级实用的小技巧啊!你知道吗,有时候找文件找...