Effective C++ 让自己习惯C++

1.C++可视为一个由相关语言组成的联邦,而不是单一语言。每一个次语言都有自己的规约,编程守则也视情况而变化。

  • C. C++仍然是以C为基础的。
  • Object-Oriented C++: 面向对象的设计。包括 类(构造函数,析构函数),封装,继承,多态,动态绑定(虚函数)..
  • Template C++:C++泛型编程(template)..
  • STL:标准模板库,对容器,迭代器,算法以及函数对象的使用

2.最好以const对象,enum hack替换预编译#define.对于形似函数的宏,最好改用inline函数而不是#define.

3.const的使用

  • const 出现在*左边表示 被指物是常量,出现在*右边是说指针是常量
    const int * pc; //表示被指为常量
    int const * pc; //同上
    int* const pc; // 表示指针为常量不能修改

 const iterator 代表T* const
const_iterator 代表 const T*

  • 使用const声明可以让编译器侦测出一些错误用法。

  • 编译器强制实施bitwise constness,但编写程序仍然要小心注意conceptual constness.

    mutable可以释放non-static成员变量的bitwise constness约束,使其能在const成员函数中被赋值

  • const和nonconst成员函数有着实质等价的实现时,用nonconst版本去调用const版本可以避免代码重复

    char & operator[] (std::size_t position)
    { return
    const_cast(
    static_cast(*this)[position] );
    }

    以上实施了两次转换,首先将*this的原始类型转换成const,然后从const operator[]的返回值中移除const。

4.确定对象被使用前初始化

为内置类型进行手工初始化,因为C++不能保证初始化他们。
构造函数最好使用成员初始化列,而不是在构造函数本体内使用赋值操作。比如下面的numTimesConsulted是一个int类型,这里必须手工初始化他们,而其他的类型可以调用各自的赋值构造函数(copy constructor)去进行初始化。如果在本体内进行初始化,实际上是要首先调用default构造函数去为成员变量设初值,然后立刻再对他们赋予新值。


Entry::Entry(const string& name, const string& address,
const list& phones)
: theName(name),
theAddress(address),
thePhones(phones),
numTimesConsulted(0)
{}

你可能感兴趣的:(Effective C++ 让自己习惯C++)