c++typedef和using关键字定义类型别名

定义类型别名有2种方法:
(1)typedef关键字
(2)using关键字

int:

typedef int myInt;        //myInt是int的别名
//等价于
using myInt = int;        //myInt是int的别名

double:

typedef double myDouble;            //myDouble是double的别名
//等价于
using myDouble = double;            //myDouble是double的别名

string:

typedef string myString;               //myString是string的别名  
//等价于
using myString = string;               //myString是string的别名 

类:

#include "Student.h"
typedef Student MyStu;             //MyStu是Student的别名
//等价于
using MyStu = Student;             //MyStu是Student的别名

引用:

typedef int& myRef;                   //myRef是int&的别名
//等价于
using myRef = int&;                   //myRef是int&的别名

指针:

typedef int* myPoint ;              //myPoint是int *的别名
//等价于
using myPoint = int*;               //myPoint是int *的别名

这么多例子看来,使用typedef和using,别名只不过和类型换了位置而已。

比较特殊的是数组,定义一个大小为4的数组的别名:

typedef int int_array[4];                    //int_array是int[4]的别名
//等价于
using int_array = int[4];                    //int_array是int[4]的别名

定义别名之后:

int_array a1;
//等价于
int a1[4];

如果typedef和using一起写,且含义相同,没有问题。不需要考虑谁覆盖谁,因为都一样:

using int_array = int[4];
typedef int int_array[4];         /编译通过

int_array a1;

但如果2者定义相同的别名,含义有冲突,比如数组大小定义上两者不一致,会报错:

using int_array = int[4];
typedef int int_array[5];       //与第一行定义的类型别名冲突,此行会报错
    
int_array a1;

</br>
送分题:

typedef int int_array[10];
int_array *p;

第二句等价于?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容