我是靠谱客的博主 清爽店员,最近开发中收集的这篇文章主要介绍第二章 2.5-2.6,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2.5  处理类型

2.5.1    类型别名

1、typedef可用于定义类型别名。e.g. typedef double wages, *p; // wages是double的同义词,p是double*的同义词

2、新标准定义类型别名的新方法:别名声明(alias declaration)。e.g. using SI = Sales_item; // SI是Sales_item的同义词

3、遇到使用类型别名的声明语句时,不要尝试直接替换回本来的样子去理解语句的意思。e.g. P61

2.5.2    auto类型说明符

1、auto类型说明符:通过它可以让编译器替我们去分析表达式所属的类型。auto定义的变量必须有初始值,并且若该语句定义多个变量,则所有变量的初始基本数据类型都必须一样。

2、编译器推断出来的auto类型有时候和初始值并不完全一样,编译器会适当地改变结果类型使其更符合初始化规则。

(1)使用引用初始化auto时,真正参与初始化的是引用对象的值,所以引用对象的类型为auto的类型。

(2)auto一般会忽略掉顶层const,而保留底层const。e.g. P62

const int ci = i, &cr = ci; 

auto b = ci; // 虽然ci是常量,但是auto忽略顶层const,所以b是int

auto c = cr; // 虽然cr是底层const,但是真正参与初始化是cr引用的对象,也就是ci,ci是顶层const,所以c也是int

auto e = &ci; // &ci是底层const,所以e是指向整数常量的指针

(3)引用与auto:e.g.

auto &g = ci; // g绑定了常量ci,因此只能是整型常量引用

auto &h = 42; // h推演类型是int&,但是int型引用只能绑定int对象,不能绑定字面值,所以这么写是错的,而如果在auto前加上const,就是正确的。

2.5.3    decltype类型说明符

1、decltype:选择并返回操作数的数据类型,在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。如果decltype使用的表达式是一个变量,则decltype返回该变量的类型,而不会因为是顶层const或引用而做特殊处理。因此引用只有用在decltype处,不会作为其绑定对象的同义词。

2、decltype使用的表达式不是一个变量时,decltype返回表达式结果对应的类型。有些表达式将向decltype返回一个引用类型:(P63)

(1)表达式的内容是解引用操作时,decltype将得到引用类型。

(2)如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型;如果给变量加上了一层或多层括号,编译器就会把它当做一个表达式,这样的decltype会得到引用类型。

2.6  自定义数据结构

1、可以通过关键字struct定义类,类定义的最后需要加上分号。

2、一般将类定义在头文件中,头文件通常包含那些只能被定义一次的实体,如类,const和constexpr变量等。

3、头文件也经常用到其他头文件的功能,有必要在书写头文件时做适当处理,使其遇到多次包含的情况也能安全和正常地工作。

4、确保头文件多次包含仍能安全工作的常用技术是预处理器(preprocessor)。(P68)

(1)#include:编译器遇到它时会将指定头文件的内容代替#include

(2)头文件保护符:#ifndef,#define,#ifdef,#endif,使用它们能有效地防止重复包含的发生

(3)预处理器无视C++中关于作用域的规则

(4)整个程序中的预处理变量包括头文件保护符必须唯一,为了避免与程序中其他实体发生名字冲突,一般将预处理变量的名字全部大写

(5)头文件即使没有被包含在任何头文件中,也应该设置保护符。头文件保护符很简单,程序员只要习惯性地加上就可以了,没必要在乎你的程序到底需不需要

作业题:

练习2.33:不能把int值分配到int*与const int*的实体,所以d和e的赋值是错误的。

练习2.37:最后一句括号中a = b这条语句不会执行,因为decltype只判断括号中的类型,不实际执行它。

练习2.39:实际运行的报错信息:

(1)foo后面接int是非法的(编译器认为定义了一个foo型变量“int”,但是int不能作为变量名)

(2)“main”的返回类型应为int而非foo

(3)return:无法从int转换为foo

所以一定要记得struct定义的最后要加分号!

最后

以上就是清爽店员为你收集整理的第二章 2.5-2.6的全部内容,希望文章能够帮你解决第二章 2.5-2.6所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部