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) {}//错误重载

如有错误,敬请斧正

相关内容

热门资讯

安卓系统目前哪个最好,探索当前... 你有没有想过,手机里的安卓系统就像是一群各具特色的英雄,每个都有自己独特的技能和魅力。那么,问题来了...
安卓系统怎么把图标锁上,图标锁... 手机里的图标乱糟糟的,是不是也想给它们来个“小锁”,让它们乖乖待在原地呢?别急,今天就来教你怎么把安...
微软换账号注册安卓系统,安卓系... 你有没有想过,有一天你的安卓手机突然焕然一新,仿佛重获新生?这可不是普通的升级,而是因为微软的账号注...
怎么停止安卓系统更新,轻松关闭... 手机更新又来了!是不是每次安卓系统更新,你的手机都像被施了魔法,速度变慢,电池续航也跟着缩水?别急,...
股票买平板还是安卓系统,股票投... 最近是不是也被手机屏幕的诱惑给勾住了?想换一台新平板,但又纠结是买苹果的iPad还是安卓系统的平板呢...
iso系统比安卓安全,超越安卓... 你知道吗?在手机操作系统这个江湖里,ISO系统和安卓系统可是两大门派,各有所长。但今天,我要给你揭秘...
安卓手机系统排名图片,揭秘市场... 你有没有发现,现在安卓手机市场上,各种品牌的手机层出不穷,让人眼花缭乱?今天,就让我带你一起走进这个...
安卓系统手机没电图片,电量耗尽... 手机没电了,这可是个让人头疼的小麻烦呢!想象你正沉浸在追剧的乐趣中,突然屏幕一黑,手机没电了。这时候...
安卓系统温控模块在哪里,核心功... 你有没有遇到过手机发热的情况,是不是觉得手机就像个小暖炉,让你有点招架不住呢?别急,今天就来给你揭秘...
最流畅的安卓原生系统,探索安卓... 你有没有想过,为什么你的手机用起来有时候那么卡,有时候又那么流畅呢?这背后,其实隐藏着一个秘密——那...
安卓系统可以刷windows吗... 你有没有想过,你的安卓手机或者平板,竟然能变身成一台Windows电脑?是的,你没听错,安卓系统是可...
苹果安卓操作系统,全面对比与深... 你有没有想过,为什么你的手机里装了那么多应用,而别人的手机却看起来那么清爽?这背后,其实就是苹果的i...
安卓tv中文系统,功能解析与使... 你有没有发现,家里的安卓TV最近变得超级智能呢?没错,就是那个曾经只能看看视频、玩玩游戏的小家伙,现...
谷歌安卓10系统打不开,原因排... 最近是不是你也遇到了这个让人头疼的问题:谷歌安卓10系统打不开?别急,让我来帮你一步步排查,找出原因...
安卓系统转苹果吃鸡,体验全新i... 你知道吗?最近身边的小伙伴们都在热议一个话题:从安卓系统转到苹果手机,体验吃鸡游戏的新鲜感。这可不是...
双系统d盘安装安卓,轻松实现手... 你有没有想过,在电脑上同时拥有Windows系统和安卓系统,是不是就像拥有了两个世界的大门呢?想象一...
安卓系统后台运行程序,高效运行... 你有没有发现,手机里的安卓系统后台运行程序有时候就像那些调皮的小精灵,悄无声息地在你不知道的时候忙碌...
苹果ipad如何改安卓系统,轻... 你有没有想过,把你的苹果iPad换成安卓系统,是不是会有一种全新的使用体验呢?想象那些你熟悉的安卓应...
安卓隐藏系统状态栏,安卓隐藏系... 你有没有发现,手机屏幕下方那个小小的状态栏,有时候真的挺碍眼的?尤其是当你沉浸在游戏或者追剧的时候,...
bb10系统安装安卓,轻松实现... 你有没有想过,把那老式的BB10系统升级成安卓,让它焕发第二春呢?想象你的老手机瞬间变成了一个功能强...