【C/C++】Effective C++笔记

★条款:尽量以const, enum, inline替换#define

#define ASP 3.14
//替换为
const double ASP = 3.14

原因:#define是预处理指令,它的宏名称在编译器处理之前已经被移走,当出现错误时,不会提示宏名称(如上面的ASP),而是提示宏所替代的常量3.14,这样我们很难排查到错误。

★条款:确定对象使用前已先被初始化

int a; //未初始化
int b = 0;    //对int进行手工初始化
const char* text = "a string";  //对指针进行手工初始化

原因:对象未进行初始化时,可能会是一个随机值。如:上面的int型变量a。

1、内置类型(int、char、string等等)直接手工初始化。

2、类中的成员变量则需要通过构造函数进行初始化

注意:

1)对象的成员变量是在进入构造函数之前初始化的构造函数内部是属于对变量进行赋值

2)成员变量初始化方式:一般通过初值列表对成员变量进行初始化。

class Monte{
public:
    Monte(int a, string b, char c):d(a), e(b), f(c){    //构造函数前的初值列表才是属于对成员变量进行初始化操作
        d = a;    //此处构造函数内部属于对成员变量赋值操作
        e = b;
        f = c;
    }
    int d;    //这里变量的声明顺序决定其在初值列表中初始化的先后顺序。(对!就是如此)
    string = e;
    char f;
}

备注:

1)上面代码构造函数前的初值列表对成员变量进行初始化,构造函数只是在对成员变量赋值。

2)成员变量初始化顺序由变量申明的先后顺序决定,而不是初值列表中的顺序。

扫描二维码关注公众号,回复: 12679756 查看本文章

猜你喜欢

转载自blog.csdn.net/chen1234520nnn/article/details/109061896