C++: 为数据类型定义别名的方式

来源:互联网 发布:js隐藏item 编辑:程序博客网 时间:2024/05/12 16:25

C++: 为数据类型定义别名的方式

标签: C++ 定义别名 #define typedef

by 小威威


在C++中,为数据类型定义别名有两种方式:第一种就是用宏定义(#define),第二种方法就是用typedef。虽然这两种方法都能为数据类型定义别名,但是我还是比较推荐使用typedef,尤其是在定义多个变量的时候。

现在我们来看一段简单的代码,你就能很快的明白typedef优于宏定义的原因。

// 用宏定义定义别名# include <iostream># define Pointer int*// typedef int* Pointer;int main(void) {    Pointer a, b;    a = 1;    b = 1;    return 0;}编译器显示的错误信息如下:typedef.cpp: In function ‘int main()’:typedef.cpp:6:7: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]     a = 1;       ^

根据编译器提示的信息,我们发现在该程序中,a是指针,不能正常赋值,而b是int类型,可以正常赋值。说明用宏定义的替换相当于下面的语句:

int *a, b;

即是定义a为指向int类型的指针,而b为int类型的变量。

// 用typedef定义别名# include <iostream>typedef int* Pointer;int main(void) {    Pointer a, b;    a = 1;    b = 1;    return 0;}编译器显示的错误信息:typedef.cpp: In function ‘int main()’:typedef.cpp:6:7: error: invalid conversion from ‘int’ to ‘Pointer {aka int*}’ [-fpermissive]     a = 1;       ^typedef.cpp:7:7: error: invalid conversion from ‘int’ to ‘Pointer {aka int*}’ [-fpermissive]     b = 1;       ^

根据编译器提示的信息,我们发现在该程序中,a、b都为指针,都不能正常赋值。说明编译器将代码转化为:

int *a, *b;

经过对比我们发现,宏定义这种编译前的替换有一定的局限性,它只是简单的进行替换,当变量数量较多时,就会出现类似于上面例子的情况。而typedef很聪明,不会产生这样的错误。

因此,我推荐用typedef为数据类型定义别名。


以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿6天没大便怎么办 大便带鲜血 不疼怎么办 宝宝发烧到39度怎么办 肛裂大便出鲜血怎么办 拉大便有血怎么办啊 长痔疮拉大便血怎么办 病人卧床太久不解大便怎么办 宝宝拉泡沫便便怎么办 孩子拉肚子怎么办呢有好办法吗 2岁宝宝大便带血怎么办 十个月宝宝肛裂怎么办 大便时拉出血怎么办啊 2岁宝宝大便干燥怎么办 5岁儿童大便干燥怎么办 九个月宝宝平血怎么办 6个月宝宝肛裂怎么办 3岁儿童大便干燥怎么办 外痔疮出血了该怎么办 外痔疮流血了怎么办呢 外痔疮破了出血怎么办 拉稀拉的肛门疼怎么办 大人屁股沟裂了怎么办 肛门痛大便有血怎么办 肛裂出血几天了怎么办 肛裂拉屎出血该怎么办 孕期肛裂出血该怎么办 老人大便拉不出来怎么办 拉屎拉的屁眼疼怎么办 拉屎堵在肛门口怎么办 上火拉大便有血怎么办 7岁儿童大便带血怎么办 阴炎用药后出血怎么办 孕晚期大便拉不出来怎么办 想拉屎拉不出来怎么办 4岁幼儿大便干燥怎么办 2岁幼儿大便干燥怎么办 1岁幼儿大便干燥怎么办 5岁幼儿大便干燥怎么办 4岁儿童大便干燥怎么办 狗吃别的狗的屎怎么办 狗狗黄疸怎么办最有效