C++编程之typedef const指针 函数类型 typedef与#define

  次阅读 来源:互联网(转载协议) 2016-01-26 10:30 我要评论(0)

至今已遇到两个typedef诡异的定义,因此决定下笔记之,以备后用。

【typedef之const指针】

【案例】

typedef string * pstr;

const pstr cpstr;

问上述代码中cpstr是一个怎样的指针?

【分析】

很多朋友,包括我自己在刚接触到时,第一反应是:cpstr被定义为一个指向const string对象的普通指针,原因很简单,置换一下string*与pstr的位置就得到

//这显然就是一个指向const string对象的普通指针

const string * cpstr;

然而,事不如人愿,cpstr的确切定义为:一个指向string类型的const指针。

看到这个答案,相比不少朋友稍显惊讶,我也如此,其中内因,且听我慢慢道来。

之所以出错,在于我们 置换一下就好了 , 置换 这个词不应该用在typedef,而该用在#define宏身上,typedef是定义了一个类型别名,定义的结果遵循任何正常定义的标准。那么这个typedef到底是怎么定义了一个const指针呢?

首先分析

const pstr cpstr;

这段代码定义了一个pstr类型的const cpstr,实际上就是

pstr const cpstr;

为了便于理解,就拿int定义来说

//二者等价,前者是习惯用法,后者是标准规定

const int ival = 0;

int const ival = 0;

既然理解了cpstr是一个const的pstr类型的对象,pstr是什么呢?pstr是string*,因此这样一来,就成了cpstr是一个const的string*类型的对象,也即cpstr是一个指向普通string的const指针。

【总结】

本次误解主要源于大家认为typedef等同于#define宏定义,以为简单替换字符就可以了。实则不然。以后见到这样的定义,最简单的办法就是从定义该变量的地方入手

typedef string * pstr;

const pstr cpstr;

按步骤(熟练了就很快了)思考:

①cpstr是一个类型为 pstr 的常量

②pstr 是什么?

③pstr 是 string*

④所以,cpstr是一个类型为 string* 的常量,也即 string *const cpstr

【typedef之函数类型】

【案例】

typedef int FUNC (int);

请问typedef定义了一个什么类型?

【分析】

不要惊讶,就是这样,它不是一个函数指针,也不是被我写错了。

它定义了一个函数类型FUNC,这个函数类型要求一个int形参,返回一个int结果。

【总结】

FUNC TestFunc(FUNC F);

FUNC的用法是有限制的,上述语句会导致编译时错误。

上述代码使用了两次FUNC,出错的是第一个,也就是FUNC类型的函数返回类型是有错的。

FUNC是函数类型,在另一个函数中,函数类型变量只能够用作另一个函数的形参,而不能是返回类型。

FUNC用作形参时,编译器会自动将其转换为FUNC* /*函数指针*/,而编译器不会将作为函数返回类型的FUNC进行转换,因此会出现编译时错误,可修正如下

FUNC* TestFunc(FUNC F);

声明了一个函数TestFunc,该函数要求一个函数类型为FUNC的函数F作为形参,并返回一个FUNC类型的函数指针FUNC*

【typedef与#define】

【案例】

typedef int* Tpi;

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

    马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

  • 汤晓鸥:人工智能的中国式文艺复兴

    汤晓鸥:人工智能的中国式文艺复兴

  • 全球陷入"区块链狂热"潮,大规模应用还需等待

    全球陷入"区块链狂热"潮,大规模应用还需等待

  • 区块链最近太火,但A股多家公司明确表态不考虑涉足

    区块链最近太火,但A股多家公司明确表态不考虑涉足

网友点评网友点评
阅读推荐阅读推荐

算法 任何一个入门的软件开发人员都会听到这句话:算法是软件的灵魂!近年来大火的机器学习即是在算法在人工智能上的集中体现。今日头条通...

据《日本经济新闻》报道,日本东京大学教授稻叶雅幸等人开发出再现日本人骨骼肌肉构造的机器人。机器人各部位的肌肉和骨骼长度与日本人的平...

以奥黛丽-赫本为原型打造的人形机器人索菲娅首次拜访了印度。索菲娅是世界上首位获得公民身份的机器人,她在12月30日出现在了印度理工学院...

在查获现场,代售点电脑旁的一台机器人通过敲击电脑键盘抢票。 广州日报惠州讯 (全媒体记者秦仲阳 通讯员张中铃摄影报道)2018年春运售票已...