C++中的类型别名

作者: dongwenbo | 来源:发表于2017-01-20 02:33 被阅读158次

    本文写作时长1小时


    以前我们学习过C++中的引用,引用就是变量的别名。不光变量可以定义别名,类型也可以声明别名。

    声明类型的别名有两种方式

    从C继承过来的typedef

    typedef double wages;
    typedef wages base,*p;
    

    double == wages == base double * == p

    这些类型都是可以互换的。其中,typedef是作为基本数据类型的一部分出现,typedef出现的声明语句定义的不是变量而是类型别名。值得一提的是,像*这样的符号属于类型修饰符,修饰前面的类型用的,而*p则叫做声明符,声明符中可以出现类型修饰(比如*),这和定义变量相差无几,所以也能由基本数据类型构造出复合类型来。

    新标准中的 别名声明 using

    using wages = double;
    using p = wages *;
    

    常量指针的类型别名

    typedef int *pint;
    int i = 0;
    const pint pi = &i;
    

    千万别蒙,再解释一遍,typedef int是属于基本数据类型部分,*是类型修饰符,表明这是个指针。*pint属于声明符,声明符中包含了一个类型修饰符*pint是类型别名的名字。那么pint是什么类型的别名呢?掐头去尾,中间的部分int *,所以pint是一个指向int类型的指针类型

    那么,pi就是一个指向int类型的指针变量,由于基本类型中有const,所以pi是一个指向int类型的常量指针,而非大多数程序员理解的只读指针,所以以下这种替换是错误的:

    const int *pi = &i;
    

    这样意义则完全不同,这时pi是一个指向int类型的只读指针,千万要记住,不能这么替换!

    原理解读:
    const pint pi = &i;中,pi的基本类型是int *,也就是指针,const限定指针,即为常量指针。而在const int *pi = &i;中,pi的基本类型是intconst限定int,则成为只读指针。

    最后给读者出一道思考题目

    相关文章

      网友评论

        本文标题:C++中的类型别名

        本文链接:https://www.haomeiwen.com/subject/byrwbttx.html