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
- C++: 为数据类型定义别名的方式
- 为catalog定义别名注意的问题
- 结构体定义别名时定义为*~~的情况
- 143,为数据类型起别名
- 为复杂的声明定义简单的别名
- 关于数据类型的别名
- mybatis的定义别名
- C语言 宏定义的方式实现“bool”数据类型的功能作用
- Mybatis为实体类定义别名typeAliases
- C语言平面几何1-数据类型的定义
- C-51的数据类型扩充定义
- C语言平面几何1-数据类型的定义
- C语言结构体 别名定义
- C语言结构体别名定义问题
- typedef 为复杂的声明定义一个新的简单的别名(zz)
- typedef的用途之一---为复杂声明定义一个简单的别名
- C语言结构体及typedef关键字定义结构体别名和函数指针的应用
- C-typedef为类型取别名(12)
- startActivityForResult的使用
- php如何 使用多线程?
- Leetcode #15 3Sum 三数之和 解题小节
- Tip of the Day(Android Studio)
- Kafka API说明
- C++: 为数据类型定义别名的方式
- cocos2d-x 单指拖放,双指缩放
- JVM学习笔记(六)主内存与工作内存
- Android新浪微博字数处理
- 正则表达式学习和常用正则验证规则40条
- PHP Pthread多线程 操作
- html5 常用标签和属性
- Mac下配置adb环境变量以及使用Android Screen Monitor
- uva10603 Fill