现在的位置: 首页 > 综合 > 正文

Effective C++学习笔记(一)

2015年01月14日 ⁄ 综合 ⁄ 共 2350字 ⁄ 字号 评论关闭

关于声明

      所谓声明式(declaration),是告诉编译器某个东西的名称和类型,但略去细节,如以下皆为声明:

         

关于定义

      定义式提供了声明式所遗漏的一些细节。对于对象,定义式是编译器为此对象拨发内存的地点;对于function和function

      template,定义式提供了代码本体;对于class和class template,定义式列出他们的成员。

        

关于default构造函数

      所谓初始化(initialization),就是给予对象初值。对于用户自定义类型的对象而言,初始化由构造函数执行。

      所谓default构造函数是一个可被调用而不带任何实参者(注意是实参)。这样的构造函数要不没有参数,要不

      就是每个参数都有缺省值:

        

关于explicit

      上述的classes B和C的constructor都被声明为explicit,这可阻止它们被用来执行隐式类型转换(implicit type conversions),

      但它们仍可被用来进行显示类型转换(explicit type conversions):

       

      被声明为explicit的构造函数通常比其non-explicit兄弟更受欢迎,因为他们禁止编译器执行非预期的类型转换。除非有一个好理由

      允许构造函数被用于隐式类型转换,否则就应该把它声明为explicit。

 

关于copy构造函数和copy assignment操作符

      copy构造函数被用来“以同型对象初始化自我对象”,copy assignment操作符被用来“从另一个同型对象中拷贝其值到自我对象”:

       

      当你看到赋值符号时请小心,因为"="语法也可用来调用copy构造函数:

      Widget w3 = w2;  //调用copy构造函数

      copy构造和copy赋值很容易区别:如果一个新对象被定义(例如以上语句中的w3),一定会有个构造函数被调用,不可能调用

      赋值操作。如果没有新对象被定义(例如前述的“w1 = w2”语句),就不会有构造函数被调用,那么当然就是赋值操作被调用。

      copy构造函数是一个尤其重要的函数,因为它定义一个对象如何passed by value。考虑以下代码:

        bool hasAcceptableQuality(Widget w);

        ...

        Widget aWidget;

        if (hasAcceptableQuality(aWidget)) ...

        参数w是以by value方式传递给hasAcceptableQuality,所以在上述调用中aWidget被复制到w体内。这个复制动作由Widget

        的copy构造函数完成。pass-by-value意味“调用copy构造函数”。以by value传递用户自定义类型通常是个坏主意,pass by

        reference to const往往是比较好的选择。

 

抱歉!评论已关闭.