C++ 宏定义和 typedef 的区别
Posted MISAYAONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 宏定义和 typedef 的区别相关的知识,希望对你有一定的参考价值。
宏定义#define为预处理指令,在编译处理时进行简单的文本替换,不作正确性检查,不关含义是否正确照样带入,只在编译已被展开的源程序时才会发现可能的错误并报错。typedef为复杂的声明定义简单的别名。在自己的作用域内给一个已经存在的类型一个别名。
特点注意:
1:#define 不是语句 不要在行末加分号,否则 会连分号一块置换。
2:#define的原理是文本替换。#define定义时并不会真正去执行它所代表的东西,而是当真正在用到这个define的值时,会进行文本替换然后才执行
3:typedef是语言编译过程的一部分,但它并不实际分配内存空间
下面通过一段代码说明C++中这两者的区别和坑点~两个坑点:涉及指针类型和常量类型,需要注意
#include <iostream>
using namespace std;
int main(int argc,char** argv)
#define INT_PTR int* //不加分号,前为替代类型
#define MAX 5*5+8
typedef int* int_ptr; //加分号,后为替代类型
INT_PTR a,b;
int_ptr c,d;//int_ptr变成了int指针类型的别名
int* e,f;
int g = MAX*MAX;
//使用RTTI的typeid运算符的name()操作显示类型
cout<<"a is :"<<typeid(a).name()<<endl;
cout<<"b is :"<<typeid(b).name()<<endl;//非指针
cout<<"c is :"<<typeid(c).name()<<endl;
cout<<"d is :"<<typeid(d).name()<<endl;
cout<<"e is :"<<typeid(e).name()<<endl;//非指针
cout<<"f is :"<<typeid(f).name()<<endl;
cout<<"g is :"<<g<<endl;
cin.get();
return 0;
RTTI的typeid运算符的name()操作显示类型,不知道的话在C++Primer第十九章,运行时类型识别小节
以上是关于C++ 宏定义和 typedef 的区别的主要内容,如果未能解决你的问题,请参考以下文章