(七十四)类型别名、别名的建立
来源:互联网 发布:aa租车 摇到号 知乎 编辑:程序博客网 时间:2024/04/28 06:43
例如:
clock_t one_start;
实质上就是建立了一个int类型的变量one_start,虽然在变量名前面写的是clock_t,但他实质上是int类型的别名。
建立别名的方法:
①使用预处理器:
#define 别名 原名;
如:
#define abc double
在编译器进行处理的时候,将abc转为double进行处理。
代码:
#include<iostream>#define abc double//将abc认为是double进行处理int main(){using namespace std;abc a = 1.1;cout << a << endl;system("pause");return 0;}
输出:
1.1请按任意键继续. . .
abc正常来说,当然不是类型名,但是在使用了预处理器之后,abc可以充当类型名,并且他实质上是double类型,于是abc a=1.1;在输出abc的时候,值为1.1
预处理器:尚未学到,但可以猜测,#define就是预处理器。
②使用typedef,格式为:
typedef 原型名 别名;
如:
typedef double abc;
就是将abc认为是double进行处理。
③二者的共同点:
可以用之替代很多类型,例如指针:
#define abc double*
//或 typedef doube* abc;
abc a;
在实质上,转为double* a; 即double类型的指针a
④二者的区别:
#define在使用的时候,他替代时,若遇见多个变量被逗号运算符连在一起,不会替代所有的。例如代码:
#include<iostream>#define abc double*int main(){using namespace std;abc a,b,c;//实质上,就a被指针了,其他都是非指针a = &c;b = 2;c = 3;cout << a << endl << b << endl << c << endl;system("pause");return 0;}
输出:
0035FBF023请按任意键继续. . .
我们发现,a,b,c虽然都被类型abc一同定义,但结果就a为指针,b和c只有double类型——即b和c的运算符*被忽视了。
但是typedef不存在这种问题,在同样情况下,a,b,c三个都是指针:
代码:
#include<iostream>int main(){using namespace std;typedef double* abc;abc a,b,c;//实质上,就a被指针了,其他都是非指针double d = 3.1, e = 4.1, f = 5.1;a = &d;b = &e;c = &f;cout << a << endl << b << endl << c << endl;system("pause");return 0;}
输出:
003CFEA0003CFE90003CFE80请按任意键继续. . .
这个时候,a,b,c都是指针了。
即——#define只对第一个起全部效果,typedef对所有都起全部效果。
⑤typedef和#define
按照说明,typedef并没有创造一个新类型,只是为已有的类型创建一个新的名称。
但是没有说明#define是不是创建了一个新类型。
- (七十四)类型别名、别名的建立
- 类型别名
- 类型别名
- 类型别名
- 类型别名
- 类型别名的一些问题
- C++ : 类型的别名和对象的别名
- c++(13)处理类型--类型别名
- C#命名空间、类型的别名管理
- swift的别名和复数值类型
- 指针、常量和类型别名的困惑
- go的变量、常量、类型别名
- 单片机中通用的类型别名
- 引用(变量的别名)
- 类型别名(直接替换要谨慎!)
- swift_009(Swift 类型别名/安全/推断)
- iBATIS内置类型别名
- VC常用类型别名
- OpenJudge_P4977 怪盗基德的滑翔翼(DP)
- Android API Guides 笔记
- Storyboard要点与技巧
- ZYB's Premutation POJ5592
- NYOJ 242 计算球体积
- (七十四)类型别名、别名的建立
- 字典与数组嵌套使用时遇到的一些问题
- HMM和Viterbi
- 穷举法的算法运用
- 面板Ext.Panel使用
- 项目总结 - 毕业生信息反馈表
- Docker的第一印象
- Java设计模式之单例模式
- C#.net.linq.Contains/Dictionary如何忽略大小写