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++11快餐教程(1)-通过using定义类型的别名

    C++11快餐教程(1)-通过using定义类型的别名 在C/C++中,我们经常通过typedef来定义类型的别名...

  • go语言与C++细节上的一些差异

    类型声明和类型别名的区别 C++: C++中声明新类型,只能使用 类 或 结构体 的形式。例如在源文件a.cpp中...

  • C++中的类型别名

    本文写作时长1小时 以前我们学习过C++中的引用,引用就是变量的别名。不光变量可以定义别名,类型也可以声明别名。 ...

  • C++笔记(3)

    弄个变量类别,C++能遇到的坑都比别人多 类型别名 还是那句话C++做什么事情都可以很多方法,连类型别名也是。ty...

  • C++远征之离港篇

    C++语言引用 #######基本数据类型引用 类型:&b = a (即:a的别名是b;b的地址指向a) ####...

  • C/C++基础(5)

    C++ namespace 引用 引用的本质是变量的别名int a = 10;int &b = a;"数据类型 &...

  • C++ 类型堆叠(别名)概念

    本文参考出处:什么是严格别名(堆叠)规定,以及为什么我们要关注它C++标准中对表达式限定类型转换的描述(私翻) (...

  • Typescript进阶

    类型别名 类型别名用来给一个类型起个新名字。 上例中,我们使用 type 创建类型别名。 字符串字面量类型 字符串...

  • (六)C++中的类型转换、IO流与STL标准模板库

    C++中的类型转换与STL标准模板库 一、C++类型转换 在C++中类型转换包含 static_cast、cons...

  • Kotlin学习(十四): 类型别名(Type aliases)

    接下来学习Kotlin中的注解(Annotations)和类型别名(Type aliases)。 类型别名(Typ...

网友评论

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

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