Note

来源:互联网 发布:c病毒源码 编辑:程序博客网 时间:2024/05/02 00:55

7.2.1--------------------------------------------------------------------------------------------------------------------------------

复制实参并不是在所有的情况下都适合,不适宜复制实参的情况包括: 

1、当需要在函数中修改实参的值时。 

2、当需要以大型对象作为实参传递时。对实际的应用而言,复制对象所付出的时间和存储空间代价往往过在。 

利用const引用避免复制。使用引用形参,函数直接访问实参对象而无需复制。

bool isShorter(const string &s1,const string &s2)

return s1.size() < s2.size(); 

}


3、当没有办法实现对象的复制时。

12.4.1--------------------------------------------------------------------------------------------------------------------------------

有些成员必须在构造函数初始化列表中进行初始化。对于这样的成员,在构造函数函数体中对它们赋值不起作用。没有默认构造函数的类类型的成员,以及 const 或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中进行初始化。 

必须对任何 const 或引用类型成员以及没有默认构造函数的类类型的任何成员使用初始化式。 

12.6.1--------------------------------------------------------------------------------------------------------------------------------

static 函数没有 this 指针 。

static 成员是类的组成部分但不是任何对象的组成部分,因此,static 成员函数没有 this 指针。通过使用非 static 成员显式或隐式地引用 this 是一个编译时错误。 

因为 static 成员不是任何对象的组成部分,所以 static 成员函数不能被声明为 const。毕竟,将成员函
数声明为 const 就是承诺不会修改该函数所属的对象。最后,static 成员函数也不能被声明为虚函数。 

--------------------------------------------------------------------------------------------------------------------------------

不能在类声明中初始化const数据成员。因为类的对象未被创建时,编译器不知道值是什么。

const数据成员的初始化只能在类构造函数的初始化表中进行,例如
class A
{…
A(int size); // 构造函数
const int SIZE ;
};
A::A(int size) : SIZE(size) // 构造函数的初始化表
{

}
A a(100); // 对象a 的SIZE值为100
A b(200); // 对象b 的SIZE值为200


怎样才能建立在整个类中都恒定的常量呢?别指望const数据成员了,应该用类中
的枚举常量来实现。例如
class A
{…
enum { SIZE1 = 100, SIZE2 = 200}; // 枚举常量

int array1[SIZE1];
int array2[SIZE2];
};
枚举常量不会占用对象的存储空间,它们在编译时被全部求值。枚举常量的缺点是:
它的隐含数据类型是整数,其最大值有限,且不能表示浮点数(如PI=3.14159)。