1.endl是一个特殊值,称为操纵符(manipulator),将它写入输出流时,刷新设备相关的缓冲区。所以在调试的时候如果采用插入输出语句的方式的话,一定要刷新缓冲,否则不会立即看到结果。
2.C++设计的主要焦点是使所定义的类类型的行为可以像内置类型一样自然。
3.大多数现代程序设计语言都采用两种方式扩充基本特征集,允许程序员通过自己定义数据类型扩展该语言和提供库。
4.将负数赋值给unsigned类型的问题:取模,在c++中是合法的。
5.对算数类型的选择很重要,关系到准确性和效率问题。标准库定义了一组类型用于统计对象的大小,其他情况下,使用unsigned类型比较明智(针对整型而言),可以避免值越界导致结果为负数的可能。
当执行整型算术运算时,很少使用short;在一些机器上,用long类型进行计算所付出的运行时代价远远高于用int类型进行同样计算的代价,所以选择前要先了解程序的细节,并且比较long和int的实际运行时代价。事实上,有些机器上,double类型比float类型计算快得多。
6.直接初始化和复制初始化之间的差别很微妙,直接初始化更灵活也更高效。
7.通过计数器对string进行初始化。
8.在函数体外定义的变量都初始化为0。
9.const对象默认为文件的局部变量。通过指定const对象为extern就可以在整个程序访问它而非const变量是默认能在其他文件访问的。非const引用只能绑定到与该引用同类型的对象。const引用可以绑定到不同但相关的类型的对象或绑定到右值。
10.枚举:用来初始化枚举的必须是常量表达式,所谓常量表达式就是在程序编译阶段就知道值的整型表达式。并且不能改变枚举的值。
11.头文件一般包含类的定义,extern变量的声明和函数的声明。设计头文件应注意:编译头文件需要一定的时间,如果头文件太大,编译时代价也会很大。为了减少编译时间,有些c++实现支持预编译头文件。头文件不该含有定义这个规则有三个例外:可以定义类,值在编译时就已知道的const对象和inline函数。在实践中不会有任何存储空间用于常量表达式初始化的const变量。
12.避免多重包含:预处理器变量的名字在程序中必须是唯一的,任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。#define接受一个名字并定义该名字为预处理器变量,#ifndef检测。
13.标准库定义了4个io对象,cin,和ostream的三个:cout,cerr,clog
2.C++设计的主要焦点是使所定义的类类型的行为可以像内置类型一样自然。
3.大多数现代程序设计语言都采用两种方式扩充基本特征集,允许程序员通过自己定义数据类型扩展该语言和提供库。
4.将负数赋值给unsigned类型的问题:取模,在c++中是合法的。
5.对算数类型的选择很重要,关系到准确性和效率问题。标准库定义了一组类型用于统计对象的大小,其他情况下,使用unsigned类型比较明智(针对整型而言),可以避免值越界导致结果为负数的可能。
当执行整型算术运算时,很少使用short;在一些机器上,用long类型进行计算所付出的运行时代价远远高于用int类型进行同样计算的代价,所以选择前要先了解程序的细节,并且比较long和int的实际运行时代价。事实上,有些机器上,double类型比float类型计算快得多。
6.直接初始化和复制初始化之间的差别很微妙,直接初始化更灵活也更高效。
7.通过计数器对string进行初始化。
8.在函数体外定义的变量都初始化为0。
9.const对象默认为文件的局部变量。通过指定const对象为extern就可以在整个程序访问它而非const变量是默认能在其他文件访问的。非const引用只能绑定到与该引用同类型的对象。const引用可以绑定到不同但相关的类型的对象或绑定到右值。
10.枚举:用来初始化枚举的必须是常量表达式,所谓常量表达式就是在程序编译阶段就知道值的整型表达式。并且不能改变枚举的值。
11.头文件一般包含类的定义,extern变量的声明和函数的声明。设计头文件应注意:编译头文件需要一定的时间,如果头文件太大,编译时代价也会很大。为了减少编译时间,有些c++实现支持预编译头文件。头文件不该含有定义这个规则有三个例外:可以定义类,值在编译时就已知道的const对象和inline函数。在实践中不会有任何存储空间用于常量表达式初始化的const变量。
12.避免多重包含:预处理器变量的名字在程序中必须是唯一的,任何与预处理器变量相匹配的名字的使用都关联到该预处理器变量。#define接受一个名字并定义该名字为预处理器变量,#ifndef检测。
13.标准库定义了4个io对象,cin,和ostream的三个:cout,cerr,clog