类型别名(直接替换要谨慎!)

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不能被改变

所以,遇到类型别名的时候替换要谨慎,应该理解别名放在各种声明形式中的含义。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值