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不能被改变
所以,遇到类型别名的时候替换要谨慎,应该理解别名放在各种声明形式中的含义。
C++类型别名与替换注意事项
本文介绍了C++中两种定义类型别名的方法:typedef和using,并通过实例解释了在使用类型别名时替换可能导致的错误。重点讨论了const限定符在不同类型别名中的作用,强调了替换类型别名时的谨慎必要性。
&spm=1001.2101.3001.5002&articleId=45970515&d=1&t=3&u=03829f918ae84e6c928ceafd972d773c)
1029

被折叠的 条评论
为什么被折叠?



