1、文字常量
- 整型文字常量前可加0,表示八进制数,加0x表示十六进制数,如,0x14表示十进制的20。整型文字常量后可加L(或l,但推荐用大写字母,不易和数字混淆)表示long类型,加U(或u)表示无符号数,如,1024UL。
- 科学计数法中,指数可写作e或E,如,3e-3表示3×10-3。浮点型文字常量缺省为double型,其后可加f或F来表示单精度文字常量;扩展精度由后面跟l或L来指示。
- 字符文字前加L表示宽字符文字,类型为wchar_t。在字符串后加/表示在下一行继续。字符串前加L表示宽字符串文字,以宽空字符结束。两个(宽)字符串在程序中相邻,C++会把它们连接在一起,并加上一个空字符,如"two" "some",结果为"twosome"。
2、不要使用未定义的程序特性,这样的程序是不可移植的,而且出错不易查出。
3、复杂的技术方案一般开始的阶段需要很多时间,而且处理过程容易出错,但在这些错误过程中,不但事情很快能完成,还拓展了想象空间,充满了乐趣。
4、程序中每个对象只能定义一次,但可声明多次。
5、对象的命名
- 一般用小写字母,如index。INDEX一般用预处理器指示符#define定义。Index一般当作类型名。
- 表示符一般使用助记的名字。如table或tbl。
- 对于多个词构成的标识符,一般在每个词之间加一个下划线(有C或过程化背景的人喜欢用),或内嵌的每个词第一个字母大写(有面向对象背景的人喜欢用)。
6、如果一个变量是在全局域(global scope)内定义的,那么系统会保证给它提供初始值0;如果是在局部域(local scope)内定义的,或通过new动态分配的,那么它们是未初始化的(uninitialized),值是未定义的(undefined,一个随机的位串,可能是以前使用的结果)。
7、每种内置的数据类型都支持一种特殊的构造函数语法,可将对象初始化为0。如:
int ival = int();
8、指针作为函数参数类型,主要用来传递数组或大型的类对象。
9、函数指针指向程序的代码段。
10、不同类型的指针不是彼此的物理值不能匹配,而是对那块内存的存储布局和内容的解释完全不同。
11、要使用strlen()等操纵C风格字符串的函数,需包含头文件
#include <cstring>
12、要使用string类型,需包含头文件
#include <string>
13、平均来说,string类型实现的执行速度是C风格字符串的两倍。
14、非const对象的指针(型如const int *p)不能指向const对象(如const int i),不能通过const对象的指针修改其所指的内容;const指针(型如int *const pi)的值不能改变,但可修改其指向的内容。
15、引用必须要被初始化,一经定义不能改变。
16、用不同类型的对象或文字常量初始化一个引用时,这个引用必须被定义为const(型如const int &ir)。原因:引用的内部存放的是一个对象的地址,对于以上两种情况,编译器必须生成一个临时对象来保存它们,然后再用这个临时对象给引用赋值。如果给这个引用赋值,就改变了那个临时对象的值,而没有改变我们想要改变的对象的值,这对我们来讲是透明的,也是没有实际意义的。所以干脆把这个引用定义为const的。
17、const是右结合来表明语义的。
18、枚举类型的对象只能被一个相同枚举类型的对象或枚举成员集中的某个值初始化或赋值。
19、维数必须是常量表达式——即,必须能在编译时刻计算机出它的值。这意味着非const的变量不能被用来指定数组的维数。
20、const char ca1[] = {'C', '+', '+'};与const char ca2[] = "C++";不同的是,后者维数是4,而前者是3,因为后者的初始化值是一个字符串,有一个空字符。
21、typedef不是宏扩展,如:
typedef char *cstring;
extern const cstring cstr;
第二句相当于
char *const cstr;
const修饰cstr。
22、volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器未监测到的情况下改变。因此编译器不能武断地对引用这些对象的代码作优化处理。
23、只要函数被调用足够多次,内联函数就能够显著地提高性能。
24、setw()是一个预定义的iostream操纵符,它读入的字符数最多为传递给它的参数减1,如:
cin >> setw( 1024 ) >> word;