本文基于《C++ Primer(第5版)》和网上博客,整理而成。

一、类型别名

类型别名是一个名字,它是某种类型的同义词,有两种方法可用于定义类型别名:typedef、using。

1、关键字typedef

typedef 它在自己的作用域内给一个已经存在的类型一个别名,编译阶段,会进行类型检查。

 typedef double wages;   //wages是double的同义词
wages hourly; //等价于double hourly;

注意:使用typedef时,最后要加分号,另外,含有typedef的声明语句定义的不再是变量而是类型别名。

(1)指针、常量和类型别名

 若某个类型别名指代的是复合类型或常量时,要特别注意。

 typedef char * pstring;
pstring a,b; //a,b都是指向char的指针
const pstring cstr=; //cstr是指向char的常量指针

针对pstring,其基本数据类型是指针,对第三行代码它实际上相当于char*   const。故不能直接将类型别名替换成它本来的样子,来理解该语句的含义。

注:当const和typedef一起出现时,typedef不是仅仅简单的字符串替换。

(2)返回数组指针

 typedef int arrT[];   //arrT是一个类型别名,它表示的类型是
//含有10个整数的数组
arrT *func(int i); //func返回一个指向还有10个整数的数组指针

二、#define

1、define是预处理指令的一种,它用来定义宏,宏只是一个简单的替换,将宏变量所对应的值替换。不做正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。

 #define N 5
int main()
{
cout<<N;  //输出5
return ;
}

2、define的容易出现的问题

(1)如:想计算a=10*10,结果输出35

 #define N 5+5
int main()
{
int a=N*N;
cout<<a; //输出35
return ;
}

这是因为define只是简单的替换,所以,a=5+5*5+5。若想计算10*10,可将第一行改为

 #define N (5+5)

另外,两者的作用域不同

1、#define 无论在哪定义过,在其它的地都可以使用
2、typedef 只能在定义的作用域内使用

本文只是简单的说一说,不详细的地方,请见参考。

Ref:

http://www.cnblogs.com/li-peng/p/3853818.html

http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html

http://blog.csdn.net/luoweifu/article/details/41630195

http://www.cnblogs.com/182-7167-2685/p/5125708.html

C++中typedef和#define简介的更多相关文章

  1. c++中typedef、define、const、inline之间的区别

    1.typedef和#define的区别 typedef int* pInt; , b = ; const pInt p1 = &a; //p1是常量指针 pInt const p2 = &a ...

  2. C++中typedef和define的区别

    typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...

  3. typedef 和 #define 的区别

    本文已迁移至: http://www.danfengcao.info/c/c++/2014/02/25/difference-between-define-and-typedef.html typed ...

  4. typedef与#define的区别

    1.  typedef typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类 ...

  5. typedef和#define的用法与区别

    typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程 ...

  6. typedef 与define 的区别

    typedef和#define的用法与区别   typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译 ...

  7. typedef 优于 #define

    案例一: 通常讲,typedef要比#define要好,特别是在有指针的场合.请看例子: typedef char *pStr1; #define pStr2 char *; pStr1 s1, s2 ...

  8. typedef和#define的区别

    转自:http://www.cnblogs.com/kerwinshaw/archive/2009/02/02/1382428.html 一.typedef的用法在C/C++语言中,typedef常用 ...

  9. typedef与define

    一.typedef用法 typedef常用来定义一个标识符及关键字的别名,它生效是在语言编译过程,但它并不实际分配内存空间.typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性” ...

随机推荐

  1. hdu2149Public Sale(巴什博弈)

    Public Sale Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. Ping隧道

    1.研究原因: 校园内网的探索,校内电子图书馆资源的利用,认证校园网 2.目的: 内网服务器:在一台因防火墙等原因仅限icmp数据通过的 公网服务器 : 建立icmp 隧道链接,  并在公网服务器上进 ...

  3. 重装win10后ubuntu引导项修复

    问题描述:原来是在win7下装了ubuntu14的双系统,后台win7换win10,然后使用EasyBCD进行引导项修复时,不好使,报 error file: /boot/grub/i386-pc/n ...

  4. [leetcode-738-Monotone Increasing Digits]

    Given a non-negative integer N, find the largest number that is less than or equal to N with monoton ...

  5. vue移动音乐app开发学习(三):轮播图组件的开发

    本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...

  6. 欢迎来怼-Alpha周(2017年10月19)贡献分配规则和分配结果

    .从alpha周(2017年10月19日开始的2周)开始,提高贡献分比重. 贡献分 : 团队分 = 1 : 5 教师会在核算每位同学总分时按比例乘以系数. 每位同学带入团队贡献分10分,如果团队一共7 ...

  7. JSR303中的来验证数据信息

    spring mvc之实现简单的用户管理三 博客分类: spring spring mvc spring mvc dispatcherServlet springspring mvcbean vali ...

  8. 算法与数据结构实验题 6.4 Summary

    ★实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记 下了他认为的各个地点的小偷数量. 现在我们将 Bibi 的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节 ...

  9. Chromium之工程类别

    虽然有700多个project,其实有很多是不成声二进制执行文件的,他们主要是调用cygwin的环境,执行一些python的脚本. 具体这个.py文件做了哪些共工作,还要再研究,目前看到有打包一些.p ...

  10. 基于实现Controller接口的简单Spring工程

    这个Spring工程的特点是:实现了Controller接口(这样就可以在url中传参数?,待调查) 一下为代码,可运行. 1,web.xml <servlet> <servlet- ...