C++ Primer注解 - 类型 (typedef / auto / decltype)

类型别名(type alias)

解决问题:(基本/自定义)类型复杂记不清
解决方法:引入关键字 typedef

alias
n.别名,化名;
adv.以化名为人所知; 化名为; 别名为; 别称又被称为;

引用& 是对对象取小名
typedef 就是对 类型取小名

typedef 原类型 类型小名,*类型指针小名
typedef double dtype1;
//detype1是double的同义词

typedef dtype1 detype2,*dtp;
// detype2是dtype1的同义词,
// dtp是double*的同义词
    typedef double dtype1;
    typedef dtype1 detype2,*dtp;
    
    double dtarget = 3.14;
    dtp p = &dtarget;
//=> double *p = &dtarget;
别名声明(alias declaration)
using SI = Sales_item; //SI是自定义类型Sales_item的同义词

类型别名(type alias)和指针

联想理解:和定义指针的时候一样带*
typedef char *pstring;
const pstring cstr = 0;
const pstring *ps

类型别名,指针和const ⭐

类型别名当遇上const和指针的组合时,不能直接代入,不然会引发如下误解
    char target;
    typedef char *pstring; 
    const pstring cstr = ⌖ //const指针 
    //直接代入容易被误解成 
×  const char *cstr = ⌖//pointer to const
    //实际上应该是
√    char *const cstr = ⌖ //const指针 
以上程序理解:
pointer to const :指向const char的指针
const指针: 指向char的常量指针
总结:typedef后的指针,是锁方向的 const指针

auto类型说明符

默认把auto当作声明自动声明周期的关键字(C++98标准),而不是自动类型的关键字;
在C++11标准中auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型

出现问题 : 编程过程中,表达式的值 赋给变量 需要判断 表达式的类型
解决问题 : 引入auto说明符,让编译器去通过初值去分析 表达式(变量) 的类型
 auto定义的变量 = 表达式的运算结果
//右侧运算的结果是什么类型的对象,
//那么auto的变量的类型就是对于类型
auto定义的变量,必须有初值

auto可以在同一语句中声明多个变量

auto i = 0,*p = &i; //√
每一条声明语句只能有一种基本数据类型

换句话说:同一行不能有不同类型
(这里的类型指的是int,double等:比如int 和 double 就不能出现在同一行
而不是指变量和指针这种)

auto i = 0,*p = &i; //√
auto i = 0,d = 3.14;//×

查看auto判断的类型:typeid运算符(获得类型信息) ⭐

头文件:#include <typeinfo>
目标类型:typeid(目标).name()
#include<bits/stdc++.h>
#include <typeinfo>
using namespace std;
int main() {
    
    int i = 0,&r=i;
    auto a = r;// 推理a为int型    
    cout<<typeid(a).name(); //结果:i
    } 

const 和 auto 的复合类型

auto会忽略中间过程 忽略顶层const 保留底层const
阅读 150

推荐阅读
Akuaner
用户专栏

1 人关注
19 篇文章
专栏主页