1、 C++有两种方法可以定义类型别名,
(1) 传统的方法是使用关键字typedef
typedef double money;
typedef money price; //price也是double的别名
(2) C++11新标准规定了一种新的方法,使用别名声明关键字using
例如:
#include<iostream>
using namespace std;
using money = double; //money是double的别名
int main()
{
money f=3.14;
cout<<f<<endl;
return 0;
}
注:G++编译时加 -std=c++11 ,使用c++11标准
输出:
2、读代码时,我们往往会把类型别名替换成本来的样子来理解语句。但是有时候简单替换会产生很严重的错误。如下:
typedef int *pnum;
const pnum p = NULL; //p是常量指针
分析:const 限定的是紧跟在后面的类型pnum,p是一个指向int的常量指针。pnum类型相当于int*,例如声明一个指针p1:
int a = 3;
int* p1 = &a;
pnum p1 = &a; //这两种等价
但是如果把pnum 直接替换为 int* 放在const后面就会出现问题,上面的语句变为:
const int* p = NULL;
此时,const修饰的基本数据类型是int ,不是int*,表示*p是一个常量,即指针p指向的对象不能被赋值。而上面的 const pnum p 实际上等价于:
int* const p = NULL; //*p可以改变,指针p不能被改变
所以,遇到类型别名的时候替换要谨慎,应该理解别名放在各种声明形式中的含义。