C++ Primer Plus

作为C++经典

5 循环和关系表达式

int x=(1,024);值为二十

6 分支语句和逻辑运算符

and or not都是C++中的保留字,如果C想用,包含头文件<ios646.h>
ofstream对象,格式类似于cout,实现文件输入与输出。有子函数open(),close()

7 函数 C++的编程模块

函数原型中不必提供变量名,只需有数据类型就行
(…) 表示不指定参数
在编译阶段进行的原型化被称为静态类型检查
arguement 表示实参,parameter表示形参
指针和const,这两个一结合就麻烦起来了
与C不同,C++不允许main()调用自己
递归,分治思想 divide-and-conquer strategy
获取函数地址的方法很简单,只需要使用函数名(后边不加括号)即可。
double pm(int);
double (*pf)(int)
pf =pam;
则定义出一个指向pm()的函数指针,这个函数指针可以这么用pf(4),等价于(*pf)(4)
忍受逻辑上无法自圆其说的观点正是人类思维活动的特点。

8 函数探幽

如果实参与引用参数不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这样做,但以前不是这样。
左值 可被引用的数据对象。
long edge =5L;5L代表long类型的5
如果接受引用参数的函数的意图是修改作为参数传递的变量,则创建临时变量将阻止这种意图的实现。解决方法是,禁止创建临时变量,现在的C++标准正是这样做的(然而,在默认情况下,有些编译器仍将发出警告,而不是错误消息,因此如果看到了有关临时变量的警告,请不要忽略)。

&&表示右值引用。右值,不能通过地址访问的值。
NULL在C中是(void*)0,C++中为整数0.c++中当一个指针的值为0时,认为指针为空指针
void*无类型指针
返回引用主要是为了更高的效率,减少拷贝。
要为某个参数设置默认值,则必须为他右边的所有参数提供默认值。
函数重载 关键是函数特征标(function signature),即函数参数列表。
函数模板
template<typename AnyType>定义了一种无类型变量AnyType

实例化和具体化

decltype(x) ymake y the same type as x

9 内存模型和名称空间

不要使用#include来包含源代码文件,这样做将导致多重声明。

#ifndef if not define

register int x;
指出程序员想使用一个自动变量,在C++11中,这种提示作用也失去了,保留关键字register的重要原因是,避免使用了该关键字的现有代码非法。

$$ 链接性\left{
\begin{array}{lcl}
外部\
内部\
无\
\end{array} \right.$$

cv限制符 const和volatile
const表明内存被初始化后程序便不能再对它进行修改
volatile表明,即使程序代码没有对内存单位进行修改,其值也可能发生变化

mutable 指出某个变量可以被修改

对函数使用static修饰表明该函数只在这个文件中可见

10 对象和类

接口 一个共享框架,供两个系统交互时使用。