导读:
- 学习某种语言的基本方法是一回事,学习使用某种语言高效编程则是另一回事!
- 使自己的软件易于理解、易维护、可移植、可扩充、高效并且能实现预期的行为!
- 一个错误的选择,可能不致很快带来恶劣影响,却在发展后期出现恶劣错误,那个时候再纠正就会很困难、耗时而且代价高昂!
- 言语基本方法教你如何编程,通过编译器;而自己要设法,设计程序,使其合理而优美,并巧妙的避免编译器无法查出的错误!
- 默认构造函数要么没有参数,要有参数,所有的参数都应该有默认值!
- 构造函数前用 explicit 修饰,阻止被隐士转换,但让可以进行显式类型转换!这样的构造函数更受欢迎,因为其能阻止非预期的类型转换!
- 条款01 : 视C++为一个语言联邦
- 条款02:尽量使用const enum inline 替换 #define 也就是宁以编译器替换预处理器
#pragma once #define ZERO 0; #include <iostream> using namespace std; void main() { int a = 100; a /= ZERO; cout << a << endl; system("pause"); }
编译器编译能够通过,运行直接挂掉,原因:#define ZERO 0;也许从未被编译器看到,编译器处理源代码之前,预编译的代码可能已经被预编译器移走,于是ZERO 从未进去记号表内,所以,当运行出错时可能会带来困惑。
请记住:对于单纯常量,最好以const对象或者enums替换#define
对于形似函数,但不会带来调用开销的宏(macros),最好改用inline函数替换#define
《Effective C++》中这样描述enum hack的好处:
-
enum hack的行为更像#define而不是const,如果你不希望别人得到你的常量成员的指针或引用,你可以用enum hack替代之。(为什么不直接用#define呢?首先,因为#define是字符串替换,所以不利于程序调试。其次,#define的可视范围难以控制,比如你怎么让#define定义的常量只在一个类内可见呢?除非你用丑陋的#undef。
-
使用enum hack不会导致 “不必要的内存分配”。
-
enum hack是模板元编程的一项基本技术,大量的代码在使用它。当你看到它时,你要认识它。