Effective C++学习笔记 第一弹 1-4

来源:互联网 发布:网络大电影杀小姐 编辑:程序博客网 时间:2024/06/15 15:08
 

条款1 尽量以const和inline取代#define

1、当这么做时 #define PI 3.1415

PI 在编译之前会被预处理器移走,而并没有进去符号表,当调试时,你能看到3.1415,但是找不到PI。

2、常量指针

     常量指针:常量指针就是指向常量的指针,指针所指向的地址的内容是不可修改的。
    如 const int *p;

         int a=1;

         int b=2;

         p = &a;

         *p = 3; //error 常量指针指向的内容不能被修改

         p =&b; //ok 常量指针指向的地址可以被修改

3、指针常量

     指针常量:指针常量就是是指针的常量,它是不可改变地址的指针,但是可以对它所指向的内容进行修改

     如 int * const  p = NULL;

          int a = 1;

          int b = 2;

          p = &a;

          p = &b; //error p不能被修改 指向的地址不能被修改

          *p = b;//ok 内容可以被修改

4、指向常量的常量指针

     如 const int * const p = NULL;

     既不能修改指向 也不能修改内容

5、当需要定义一个class专属常量 可以这么做

 

/*----------------.h---------------------*/

    class GamePlay

   {

   private:

          //static const int NUM;           error:只是定义,在声明之前不能使用,必须先初始化

          static const int NUM = 4;  //static:因为所有对象公用NUM   const防止NUM被修改

          int scores[NUM];

   };

/*----------------.cpp--------------------*/

const int GamePlay::NUM = 4;  //假如在.h文件未使用 可以在.CPP文件中初始化

 

当编译器不允许类内初始化时 可以改用枚举类型

class GamePlay

{

private:

      enum { NUM = 5 };

      int Score[NUM];

};

6、用inline代替宏命令

较小的程序推荐用内联函数,但是否真的内联是由编译器决定的。

条款2 用<iostream>代替<stdio.h>

不解释

条款3 尽量以new和delete取代malloc和free

后者只是分配和释放内存,对构造函数和析构函数一无所知,其中没有任何对象被初始化

更不要混合使用

条款4 尽量使用C++风格的注释形式

也就是用//俩杠 代替 /**/杠星星杠 因为后者在嵌套的时候会出现意外

原创粉丝点击