zoukankan      html  css  js  c++  java
  • Effective C++ 小笔记:条款36

    Effective  C++ 条款3

    1、在一个函数声明式内,const可以和函数返回值、各参数、函数自身(如果是成员函数)产生关联。

    2、许多人漠视一个事实:两个成员函数如果只是常量性(constness)不同,可以被重载。这实在是一个重要的C++特征。包括const修饰成员函数本身,或者成员函数的返回值。

    3、const成员函数不可以更改对象内任何non-static成员变量。

    4、在一个成员函数里,static_cast<char&>(static_cast<const TextBlock&>(*this)[position]); 因为static_cast和[]操作符同优先级,所以结合性决定是先进行那个运算,因为它们的结合性都为从左到右,所以cast操作先于[]执行。

    5、编译器强制实施bitwise constness(事实上的常量性),但你编写程序时应该使用“概念上的常量性”。后者是说const成员函数有时可以更改某些成员变量,这些需要被const成员函数更改的变量就可以声明为mutable。(P23 effective C++)。

     Effective  C++ 条款4

    1、永远在使用对象之前先将它初始化。对于任何类成员的内置类型,你必须手工完成此事。至于内置类型以外的任何其他东西,初始化责任落在构造函数身上。规则很简单:确保每一个构造函数都将对象的每一个成员初始化。即使成员是内置类型,你也需要在成员初始化列表里面将其初始化,因为有的时候如果内置类型是const或者reference,他们就必须初始化,而不能被赋值。

    2、因为vector、list、deque等顺序容器是模板类,一旦制定了其存储的类型,如list<int> myList; 那么myList就是一个类的对象了。自然就可以直接用来对另一个类型相同的list赋值。如,list<int> hisList = myList;调用的是类的copy构造函数? 

     3、C++有着十分固定的“成员初始化次序”。次序总是相同的:base classes更早于derived classes,而class的成员变量总是以其声明次序被初始化。

     Effective  C++ 条款5、6

     1、什么时候empty class(空类)不再是个空类呢?当C++处理过它之后。是的,如果你自己没有声明,编译器就会为它声明(编译器版本的)一个copy构造函数、一个copy assignment操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会为你声明一个default构造函数。所有这些函数都是public且inline。注意,惟有当这些函数被需要(被调用),它们才会被编译器创建出来。

    2、注意copy构造函数和copy assignment操作符的形参都有const限定,并且都是引用。copy assignment操作符返回自身的引用。

    3、有的时候,编译器会拒绝为类产生copy assignment操作符:

      一,内含reference成员或者const成员的类。

      二,如果某个base classes将copy assignment操作符声明为private,编译器拒绝为其derived classes生成一个copy assignment操作符。毕竟编译器为derived class 所生的copy assignment操作符想象中可以处理base class成分,但它们无法调用derived class无权调用的成员函数。

    4、有的时候某些类的对象没有相同的对象。如房子HomeForSale类。所以有必要禁止这样的类被复制。也就是禁止编译器为这样的类自动生成copy构造函数、copy assignment操作符。为实现这个功能,可以将相应的函数声明为private并且不予实现。连空函数体都不必要,只需要在类定义中将方法声明为private,并且没有必要写出形参的名称。一般而言,这个方法并不绝对安全,因为menber函数和friend函数还是可以调用你的private函数。C++ iostream库中的类使用这个方法来阻止copy行为。

        除此之外,还有一个方法:定义一个辅助基类Uncopyable,其中将它的copy构造函数和copy assignment操作符声明为private,可以不予实现(不定义)。 

        

  • 相关阅读:
    CSUFT 1002 Robot Navigation
    CSUFT 1003 All Your Base
    Uva 1599 最佳路径
    Uva 10129 单词
    欧拉回路
    Uva 10305 给任务排序
    uva 816 Abbott的复仇
    Uva 1103 古代象形文字
    Uva 10118 免费糖果
    Uva 725 除法
  • 原文地址:https://www.cnblogs.com/younes/p/1677940.html
Copyright © 2011-2022 走看看