, 因为你这里define的变量/函数仅仅是机械地进行了替换, 不会进入编译器的记号表因此编译器无法看到define的变量名, 会出现很多难以追踪的常量
需要define常数时, 改用const变量可以解决绝大多数问题...但是在多线程环境中又有问题, 所有static成员之间可能会产生竞速关系....8 别让异常逃离析构函数
由于在C++中两个异常同时存在会导致未定义行为, 因此我们不应该让析构函数上报异常, 这是因为析构函数是会被自动调用的, 当一个对象析构而抛出异常时, 同个作用域的其它对象的析构也会被自动执行..., 也就是由拷贝构造函数生成
因此如果只是简单地传入对象会浪费很多的构造/析构操作, 最好的做法是传const引用
传const是为了让调用的人放心传入, 同时传入引用还能避免对象切割问题(派生类传入声明为基类的参数时派生类会退化为基类...所以返回局部对象的引用的行为绝对是致命的
看到static变量的时候要注意多线程中可能遇到的问题和求值顺序可能带来的问题
当用拷贝来返回局部变量是最简单最安全的实现方法时, 那就直接用, 让编译器去处理效率问题