《Effective c++》读书笔记0

2018-12-11  本文已影响0人  动如参商_06f8

  在本系列阅读笔记中,我尝试根据自己的理解对文中提到的条款进行解释,而对一些通识性的知识只是单纯的做一个笔记,笔者自身是一个c++的新手菜鸟,理解不可避免地存在纰漏和错误,希望在讨论中得到更充足的进步。

  本书的导读部分介绍了c++的一些术语,如“声明式”、“定义式”,“接口”和“客户”。考虑下述代码:

class Widget
{
public:
    explicit Widget(int value_):value(value_){};
    Widget(const Widget& rhs){};
    Widget& operator=(const Widget& rhs){};

private:
    int value;
};

int main()
{
    Widget w1 = 1;             //(1)式
    Widget w2(1);              //(2)式
    Widget w3(w2);             //(3)式
    w3 = w2;                   //(4)式
    Widget w4 = w2;            //(5)式
}

在上面这段代码中出现了显示构造函数,拷贝构造函数和赋值操作符三个概念,其中显示构造函数通过关键词explicit修饰,声明为explicit的构造函数通常比non-explicit更受欢迎,因为它们禁止编译器执行非预期的类型转换,这也是我们通常所希望的,如(1)式所示,这是一个隐式类型转换,在本段代码中该处会出现编译失败的错误。
  对于拷贝构造函数和赋值操作符,我们需要注意的是"="语法也可以用来调用拷贝构造函数,区分它们的关键在于是否有新对象被定义,如(5)式,有新对象w4被定义,所以它将调用拷贝构造函数,与之相反的,(4)式只会执行赋值操作符。

上一篇 下一篇

猜你喜欢

热点阅读