Effective C++ 阅读笔记(1)

  1. 关键字 explicit
    用于告知编译器,该构造函数可以用于完成隐式类型转换(implicit type conversation)!
    建议:除非有一个很好的理由,否则将构造函数申明为 explicit!

  1. C++是一个由多个次语言组成的语言联邦
    c 风格
    面向对象的c
    泛型C++
    STL-C++
    不同的次语言尤其各自的编程守则,以传递参数为例,若编写c风格的c++, 传值比传递引用更高效,而在面向对象的c与泛型编程中 const reference更安全可靠,到了STL_C++又回归传值更高,这与次语言本身的程序设计范式与实现方式有关。

  1. 尽量用enum,inline和const来代替define(用编译器代替预处理)
//the enum hack:
     class myClass{
    privat:
        enum {Turns = 6};
        int array[Turns];
    };

  1. 尽量使用const,只要不违反设计需求
    对于const成员函数,const表明该函数可以“操作const对象”!!!而c++中,const常量性不同的两个函数可以完成重载!!!
const char print( const myString cstr) const
    {
        return cstr[0];
    }
  • mutable 解除const的限制
// 对于类成员函数,避免const版本与非const版本重复的技巧:
// 让非const成员函数在内部调用cosnt函数
class TextBlock
{
public:
    // --- constructor 
    // -- deconstructor
    const char& operator[](std::size_t pos) const // const version
    {
        // -- operation is omitted
    }
    char& operator[](std::size_t pos ) // non-const version
    {
        return   // call const function & return the result 
            const_cast<char&>(
            static_cast<const TextBlock&>(*this)[position]
        );
        // please pay attention to the type conversion!!!
    }
};

  1. 确定对象被使用前已经被初始化
    -对于无成员的内置类型,在声明时手工完成初始化
    -对自定义类类型,使用初始化列表(member initialization lists)进行初始化!确保构造函数对每一个成员变量进行初始化(即使是无参的default构造函数,也可以使用无物的初始化列表) -> 解决引用类型、const类型的初始化问题!!!
    -利用单例模式(singleton pattern)的设计方法,解决non-local static实例的初始化问题
myClass::myClass
    :theName(),theAdreee(),theNum()
    {};
    6.

2016.10.21 待续

你可能感兴趣的:(c/c++基础)