Effective c++

1、C++由四个次语言组成:c、c++类对象、template C++、STL
 c++高效编程守则视状况而变化,取决于使用c++的哪一部分。

2、尽量以const、enum、inline替换#define
   a、常量定义式通常被放在头文件中(以便被不同的源码包含进去),如果想将常量指针(即指向常量的指针)放入头文

件中,必须指定指针也是const的,这就需要写const两次,例如:const char * const author="musun";
   通常string对象比char *-based合适。即const std::string author("musun");
   b、class的专属常量:为了将常量的作用域限制于class内,须让它成为class的一个成员,而为确保此常量至多只有一份

实体,必须让它成为一个static成员。
    class GamePlayer{
    private:
       static const int NumTurns=5;//常量定义式
       int scores[NumTurns];//使用该常量
    }
    无法利用#define创建一个class专属常量,因为#define不重视域,不能被封装,一旦宏被定义,就在其后的编译过

程中有效。
   c、“the enum hack”:当不想让别人获得一个pointer或reference指向某个整数常量,enum可以实现这个约束。
   d、宏函数方面:用inline函数替换
   最后:对于单纯常量,最好以const对象或enum替换#define
         对于形似函数的宏,最好改用inline函数替换#define

3、尽可能使用const
   a、const char * p <==> char const * p ;//都表示p指向的值不可变
      char * const p;//表示p不可指向不同的东西
   b、在迭代器中:
      const vector<int>::iterator iter; <==>  T* const p,即iter不可变
      vector<int>::const_iterator cIter;<==>  const T * p,即cIter指向的值不可变
   c、令函数返回一个常量值,使用const参数 例如:
    const Rational operator*(const Rational& lhs,const Rational& rhs);
   d、const成员函数:一是接口容易理解,二可以使“操作const对象”成为可能
      两个成员函数如果只是常量性不同,也够成重载,例如:
      class test{
    void print() const
    {
        _text="abc";//如果_text不声明为mutable,会报错
        cout<<"print const"<<endl;
    }

    void print()
    {
        cout<<"print"<<endl;
    }
    mutable string _text;
      };
      在const成员函数中,需要对成员变量做修改时,可将成员变量声明为mutable。
   e、在const和non-const成员函数中避免重复:

    运用const函数实现其非const版本的技术,反过来,用non-const实现const则是不安全的
例如:
       const char& operator[](size_t position) const
    {
           ...
        }
      
       char& operator[](size_t position)
        {
       return const_cast<char&>(   //将op[]返回值的const转除
           static_cast<const T&>(*this) //为*this加上const
             [position]                   //调用const op[]
       );
        }

     最后:多使用const,当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免重复

Effective c++,布布扣,bubuko.com

Effective c++

上一篇:c++文件输入输出流fstream,对输入>>和输出<<重载


下一篇:android recovery代码修改之原生建议