码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-25 16:37:43      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:using别名声明   const   typedef   

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

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

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

标签:using别名声明   const   typedef   

原文地址:http://blog.csdn.net/lyh__521/article/details/45970515

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!