Effective C++ 读书笔记(一)

来源:互联网 发布:java时间戳是什么 编辑:程序博客网 时间:2024/05/22 03:39

导读:

  1. 学习某种语言的基本方法是一回事,学习使用某种语言高效编程则是另一回事!
  2. 使自己的软件易于理解、易维护、可移植、可扩充、高效并且能实现预期的行为!
  3. 一个错误的选择,可能不致很快带来恶劣影响,却在发展后期出现恶劣错误,那个时候再纠正就会很困难、耗时而且代价高昂!
  4. 言语基本方法教你如何编程,通过编译器;而自己要设法,设计程序,使其合理而优美,并巧妙的避免编译器无法查出的错误!
  5. 默认构造函数要么没有参数,要有参数,所有的参数都应该有默认值!
  6. 构造函数前用 explicit 修饰,阻止被隐士转换,但让可以进行显式类型转换!这样的构造函数更受欢迎,因为其能阻止非预期的类型转换!

  1. 条款01 : 视C++为一个语言联邦
  2. 条款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的好处:

  1. enum hack的行为更像#define而不是const,如果你不希望别人得到你的常量成员的指针或引用,你可以用enum hack替代之。(为什么不直接用#define呢?首先,因为#define是字符串替换,所以不利于程序调试。其次,#define的可视范围难以控制,比如你怎么让#define定义的常量只在一个类内可见呢?除非你用丑陋的#undef

  2. 使用enum hack不会导致 “不必要的内存分配”。

  3. enum hack是模板元编程的一项基本技术,大量的代码在使用它。当你看到它时,你要认识它。


0 0
原创粉丝点击