C++之整理一些最近看书的收获
1 short 只能修饰 int 。
2 long 只能修饰 int 和 double (以及 long ,比如 long long a ; 是 long long int a; 的简写) 。
3 char 和 int 型数可以分别用 unsigned 和 signed 来修饰,表示带符号和不带符号。
4 实型数( float 和 double )一定是带符号的,不能用 unsigned 或 signed 来修饰。
5 空值类型 void :
5.1 把 void 说成空值类型并不十分恰当。当 void 作为函数的返回类型时,表明该函数不需要任何类型的返回值。
5.2 程序运行时,可以动态地申请内存。指向该内存块的指针是 void 指针类型。 void 类型指针可以转换为其他类型指针。
6 #define PI 3.14159265 // 这种定义常量的方法有缺点,因为编译系统不能对常量的数据类型进行检查。
7 sizeof()是运算符,不是函数,在用表达式初始化一个常量时(常量在编译时就能求值,用const定义也是一样),表达式中不能含有某个函数,也不能含有某个变量,但是可以用sizeof()。
8 一个实型常量如果不另作说明,其隐含类型是 double 型,添加后缀便改变其类型。例如:
123.45——无后缀,默认为 double 型,有效位为15。
123.45F——添加后缀(大写字母 F ),此数改为 float 型,有效位为7。
123.45f——添加后缀(小写字母 f ),此数改为 float 型,有效位为7。
123.45L——添加后缀(大写字母 L ),此数改为 long double 型,有效位为19。
123.45l——添加后缀(小写字母 l ),此数改为 long double 型,有效位为19。
9 假设 a 为 float 型变量。 a = 2.45678 * 4523.65 ,即:以 a 来获取 2.45678 与 4523.65 的乘积。
这里,float 型变量 a 的有效数字为 7 位,用户对这个精度已经满意。但系统却将 2.45678 和 4523.65 这两个数作为双精度数来处理,因此运算速度降低,而结果却的有效位数仍取决于 a 的类型。为了提高运算速度,可为这两个数添加后缀 F 或 f ,即赋值语句改为:
a = 2.45678F * 4523.65f ,这样,编译系统便把这两个操作数视为单精度数来进行计算,结果被赋给 a 而有效的数字仍为 7 位。
10 变量的作用域与可见性
10.1 变量的有效范围称为作用域( Scope )。
10.2 可见性( Visualization )指的是变量在某个范围内能否被访问。
10.3 在变量作用域之外,该变量不可见。但在作用域内,如果先定义一个变量,在其后的一个子域内,又定义一个同名变量,则在该子域内,后者“屏蔽”了前者。换句话说,前一个变量的作用域覆盖其中的子域,但它在子与中是不直接可见的。
10.4 定义于程序块(由花括号 “ { ” 和 “ } ” 括起来的语句序列)内的变量称为局部变量,它的适用范围开始于定义点,终止于本程序块的末尾。这个有效范围称为作用域。
1 { // 块A开始
2 float a,b; // a和b是块A内的局部变量,作用域起始于这一点
3
4 for(int i=0;i<10;i++) // i是块A的局部变量,作用域始于这一点
5 { // 块B开始
6 int j=0; // j是块B内的局部变量,作用域是块B
7 } // 块B结束
8
9 } // 块A结束,变量a,b,i 作用域终止于此
10.5 内块的变量屏蔽了块外的同名变量,并不意味着内块不能访问外块的同名变量。在内块中,同名变量之前加了辨识符“ :: ” ,则所访问的是外块的那个变量。
1 { //A开始
2 int i = 10;
3 { //B开始
4 int i = 7;
5 cout << i << endl; // 显示块B的i(i=7)
6 { //C开始
7 int i = 5;
8 cout << i << endl; // 显示块C的i(i=5)
9 cout << ::i <<endl; // 显示块B的i(i=7)
10 } //C结束
11 cout << ::i <<endl; // 显示块A的i(i=10)
12 } //B结束
13 cout << i << endl; // 显示块A的i(i=10)
14 } //A结束
10.6 定义于函数之外的变量称为全局变量。外部变量就是全局变量,其作用域起始于定义点,终止于本源文件的末尾。
10.7 为了扩大作用域,在定义点之前引用某外部变量,就必须在引用前,用关键字 extern 先声明该外部变量。其定义可以放在引用点之后。
10.8 在多文件的程序中,如果一个文件已经定义了某个外部变量,则另一个文件可以用关键字 extern 引用该变量。注意:如果两个文件同时定义某个外部变量,则在进行程序的连接时会出现“重复定义”的错误。
10.9 一般来说,把建立存储空间的说明称为定义( int a; // 定义性声明,要为 a 分配内存空间),而把不需要建立存储空间的说明称为声明( extern b; // 引用性声明,在别处分配内存空间)。
10.10 外部变量定义与外部变量声明不同。外部变量定义只有一次,其位置必须在所有函数之外,而在同一文件中,外部变量可以多次声明,既可以在函数之外(在定义点之前),也可以在各函数之内。
10.11 用 static 声明外部变量为静态全局变量,可限制外部变量的作用域,使它只能在本文件内被引用。
11 嵌入指令也可以指定带路径的文件名,例如
1 #include "E:\P\File1.cpp"