第一章
-
p6
endl
的作用是结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中 -
p14 Windows中,文件结束符是Ctrl+Z,然后Enter或Return;UNIX中,是Ctrl+D
-
p15 好习惯“编辑-编译-调试”
-
p19 标准库用尖括号(<>),不属于标准库的头文件用双引号(“”)
-
p19 文件重定向:将标准输入和标准输出与命名文件关联起来
$ addItems <infile> outfile
第二章
- p32 数值不为负(选用无符号);整数运算(int,超过int选择long long);浮点运算(选用double)
- p35 不要混用带符号和无符号类型,带符号会自动转换成无符号
- p36
'A'字符;"A"字符串
,字符与字符的数组 - p37 使用L而不是l,从而和1区分
- p39 初始化:创建变量时赋予其一个初始值;赋值:把对象的当前值擦除,用一个新值替代
- p41 分离式编译:允许将程序分割成若干个文件,每个文件可以被独立编译
- 声明:规定了变量的类型和名字;定义:在声明基础上申请存储空间,甚至赋一个初始值
- 定义=声明+显式初始化
- 变量可以被多次声明,但只能被定义一次
- p44 作用域操作符
::
,当左侧为空时,请求全局变量 - p45 引用:为对象起了另外一个名字。
- 引用是和初始值绑定在一起,而不是将初始值直接拷贝。
- 引用无法重新绑定到另外一个对象上,因此必须初始化。
- 引用只能绑定在对象上,引用本身不是一个对象。
- p47 指针本身就是一个对象;指针无须在定义时赋初值,建议初始化所有指针。
- 取地址符(
&
) - 解引用符(
*
)
- 取地址符(
- p49 C++空指针尽量使用
nullptr
,而不是NULL
- p50
void*
指针用于存放任意对象的地址 - p51 基本数据类型与类型修饰符(声明符的一部分)
int* p1, p2;
p1是指针int *p1, *p2;
p1、p2都是指针
- p53 从右向左阅读:
int *&r = p;
r引用的是一个int指针 - p60 如果想在多个文件之间共享const对象,不管是变量的定义还是声明之前都要添加
extern
关键字 - p57 顶层const(指针本身是一个常量,指针是常量),底层const(指针所指的对象是一个常量,常量的指针)
int *const p1 = &i;
顶层constconst int *p2 = &ci;
底层const
- p58 常量表达式:指值不会改变并且在编译过程中就能得到计算结果的表达式
- C++11通过
constexpr
声明变量是一个常量 - 一个
constexpr
指针的初始值必须是nullptr
或者0
- C++11通过
- p60 类型别名
- 传统使用
typedef double wages;
- 新标准使用
using SI = Sales_item;
- 传统使用
- p61
auto
类型说明符,让编译器自己分析表达式所属的类型,必须要有初始值 - p62
decltype
类型指示符,选择并返回操作数的数据类型:decltype (f()) sum = x;
,decltype(())
双层括号的结果永远是引用 - p68 使用
#ifndef
做头文件保护