第二章 变量和基本类型

2.1.基本内置类型(算数类型和空类型)

 

《C++Primer 5》笔记(2)

 

2.1.1 算数类型(整型(包括字符与布尔类型在内))

《C++Primer 5》笔记(2)

计算各种大小(class、struct、union)

2.1.2 类型转换

《C++Primer 5》笔记(2)

《C++Primer 5》笔记(2)

2.1.3 字面值常量

称之为字面值是因为只能用它的值称呼它,称之为常量是因为它的值不能修改。并且每个字面值都有相应的类型。

整型和浮点型字面值

《C++Primer 5》笔记(2)

默认的浮点字面值常量为 double 类型。

字符和字符串字面值

转义序列

指定字面值的类型

《C++Primer 5》笔记(2)

布尔字面值(true/false)和指针字面值(nullptr)

2.2 变量

对象:一块能存储数据并具有某种类型的内存空间。

2.2.1 变量定义

声明&定义

为了允许把程序拆分成多个逻辑部分。C++支持分离式编译。为了支持分离式编译,C++语言把声明与定义区分开。声明规定了变量的类型和名字,但定义申请了存储空间,也可能会为其附一个初始值。

在函数体内部,不能初始化一个由extern关键字标记的变量。

初始化&赋值

定义的方式

int test=0;

int test(0);

int test={0};

int test{0};

作为C++11新标准的一部分,使用花括号来初始化变量得到了全面应用。这种形式称为列表初始化。对于内置类型的变量,如果使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。

默认初始化

如果定义变量时未指定初始值,则变量被默认初始化,默认值由变量类型与位置有关。内置类型定义在任何函数体之外的变量默认初始化为0;定义于函数体之内的内置变量不被初始化。每个类各自决定其初始化对象的方式。

《C++Primer 5》笔记(2)

2.2.3 标识符(字母、数字和下划线组成,必须以字母或下划线开头)

《C++Primer 5》笔记(2)

《C++Primer 5》笔记(2)

2.2.4 名字的作用域

《C++Primer 5》笔记(2)

 

2.3 复合类型(基本数据类型 声明符列表)

2.3.1 引用(左值引用/C++11右值引用

引用为对象起了另一个名字,不同于普通的初始化,定义引用初始化时,引用与初值绑定在一起,而不是将值复制给引用,一旦初始化完成,引用无法再绑定另一个对象,因此引用必须初始化。

2.3.2 指针

不同于引用,指针本身是一个对象,允许赋值和拷贝,在生命周期可以指向不同的对象,无需在定义时初始化。

野指针/空指针

《C++Primer 5》笔记(2)

空指针

《C++Primer 5》笔记(2)

void* 指针(无法获取内存空间中的对象)

2.3.3 理解复合类型的声明

指向指针的引用(int*&r=p)

2.4 const限定符

默认状态下,const对象仅在文件内有效。

2.4.1 const的引用

初始化和对const的引用:引用的类型必须与其所引用对象的类型一致,但有两个例外:

(1)初始化常引用时允许用任意表达式作为初值,只要该表达式可以转换成对应的类型。

double pi = 3.14;

const int &p = pi;

本质:

double pi = 3.14;

const int temp=pi;

const int &p = temp;

(2)对const的引用可能是一个非const的对象

const int a=0;

const int &b=a;

int &c=a;//错误;可以通过c修改a,const a无意义

int d=0;

const int &e=d;

2.4.2 指针和const(类比const与引用)

2.4.3 顶层const

《C++Primer 5》笔记(2)

2.4.4 constexpr和常量表达式

《C++Primer 5》笔记(2)

constexpr定义一个指针,限定符只对指针有效,对所指对象无效。

constexpr int*p=nullptr;//p是指向整数的常量指针

2.5 处理类型

2.5.1 类型别名(typedef)

《C++Primer 5》笔记(2)

2.5.2 auto类型说明符

《C++Primer 5》笔记(2)

2.5.3 decltype类型指示符

《C++Primer 5》笔记(2)

 

2.6.3 编写自己的头文件

《C++Primer 5》笔记(2)

 

相关文章: