zoukankan      html  css  js  c++  java
  • 类型别名

    类型别名(type alias)是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。

    typedef double wages;      // wages是double的同义词
    typedef wages base, *p;    // base是double的同义词,p是double*的同义词
    

    其中,关键字typedef作为声明语句中的基本数据类型的一部分出现。含有 typedef 的声明语句定义的不再是变量而是类型别名。

    和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。
    新标准规定了一种新的方法,使用别名声明(alias declaration)来定义类型的别名∶

    using SI = Sales_item;     // SI是Sales_item的同义词
    

    这种方法用关键字 using 作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。

    wages hourly, weekly;      // 等价于double hourly, weekly;
    SI item;                   // 等价于Sales_item item;
    

    指针、常量和类型别名

    如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句里就会产生意想不到的后果。

    例如下面的声明语句用到了类型 pstring,它实际上是类型 char*的别名∶

    typedef char *pstring;
    const pstring cstr = 0;    // cstr是指向char的常量指针
    const pstring *ps;         // ps是一个指针,它的对象是指向char的常量指针
    

    上述两条声明语句的基本数据类型都是const pstring,和过去一样,const是对给定类型的修饰。

    pstring 实际上是指向 char的指针,因此,const pstring就是指向 char 的常量指针,而非指向常量字符的指针。

    遇到一条使用了类型别名的声明语句时,人们往往会错误地尝试把类型别名替换成它本来的样子,以理解该语句的含义∶

    const char *cstr = 0;      // 是对const pstring cstr的误解
    

    这种理解是错误的。声明语句中用到pstring时,其基本数据类型是指针。可是用 char* 重写了声明语句后,数据类型就变成了 char,*成为了声明符的一部分。

    这样改写的结果是,const char 成了基本数据类型。前后两种声明含义截然不同,前者声明了一个指向char的常量指针,改写后的形式则声明了一个指向const char的指针。

  • 相关阅读:
    从MSFT Project中同步数据到PSA
    TracingService. 码农debug的救星
    Business Workflow Flow 最后一个stage阶段触发Exist
    BPF form 中的readonly 只读字段自动unblock
    Windows Server 使用fiddler中抓取IIS的请求
    Dynamics 365 CE 的快捷键 Shortcut
    Dynamics 365 online 服务器保护机制 server limitation
    在后端C#中 call web api 关联lookup 和 GUID
    PSA 需要 Sales Order中 读取的最低权限 read minimal privilege
    python学习笔记10:分析程序性能cProfile
  • 原文地址:https://www.cnblogs.com/lihello/p/14304128.html
Copyright © 2011-2022 走看看