条款1:C++为一个语言联邦
1):C
2):Object-Oriented C++
3):Template C++
4):STL
内置函数类型时, pass-by-vale 通常比 pass-by-reference 高效;
用户自定义的构造、析构函数、template函数中 pass-by-reference-const 更高效。
请记住:
1):C++高效编程守则取决于你使用C++的哪一个部分。
条款2:尽量以const,enum,inline替换 #define
宏定义 #define 只是单纯的进行替换,不重视作用域,同时可能导致预期之外的错误:
|
1) |
#define pint int *; // 宏定义类型的别名 pint a , b ; // 预期产生两个整形指针变量,实际上产生一个整形指针变量 a , 一个整形变量 b 。 |
|
2) |
#define CALL_MAX(a , b) f((a) > (b) ? (a) : (b)) // 宏定义带实参的函数 int a = 5, b = 0; CALL_MAX(a , b); // 正确返回 CALL_MAX(++a, ++b); // 错误返回,此类情况下,输出由输入参数决定 |
请记住:
1):单纯变量以const 对象 或者 enum 替换 #define
2):对于形似函数的宏,最好改用 inline 函数替换 #define
条款3:尽可能使用const
Const 用于修饰 global 或者 namespace 作用域的常量;
用于修饰文件、函数、区块作用域中声明为 static的 对象;
用于修饰 class 内的成员变量;
用于修饰指针、指针所指物等。
函数声明时,可以用 const 修饰: 函数返回值,参数、函数自身(类中的成员函数)。
成员函数的const版本和非const版本可以相互重载。
|
Static |
变量 |
全局静态变量、局部静态变量 |
|
|
静态函数 |
本源文件的作用域 |
Inline 函数默认为静态函数
请记住:
1):声明 const 类型的对象、参数、函数返回类型、成员函数,可以帮助编译器侦测错误用法;
2):可以利用 non-const 成员函数调用 const 版本的成员函数避免代码重复
条款4:确定对象被使用前已经被初始化
请记住:
1):为内置对象进行手工初始化,C++不保证初始化他们
2):构造函数最好使用成员处置列实现初始化,不要再构造函数本体内使用赋值操作;
(本质上时初始化为空的对象,再对空对象赋值,成本增加)
处置列列出的成员变量次序应当与 它们在 class 中的声明次序相同。
3):为免除 跨编译单元的初始化次序 问题,用 local static 对象替换 non-local static 对象
本文探讨了C++编程的几个关键方面,包括语言联邦的四个组成部分,高效编程的策略,如选择pass-by-value或pass-by-reference。强调了const的使用,指出const能帮助编译器检测错误,并允许函数重载。还提醒程序员确保对象在使用前已被初始化,避免未定义的行为。总结了#define的替代方案,推荐使用const、enum和inline。
529

被折叠的 条评论
为什么被折叠?



