1. 临时变量是常量,因此如果参数定义类型为&类型,则传递临时变量会编译错误;
在求表达式值期间,编译器必须建立临时对象,它们需要存储空间、构造和删除,编译器负责决定他们的去留和存在细节。它自动的成为常量;
2. const返回值:
(1)返回类型是内置类型的const,则const返回值没有意义,编译器视其是一个值而不是一个变量,返回的这个变量值实际是副本;
(2)返回类型是用户定义的const, 则该值不能被复制和修改,即不能作为左值。
3. 在类里不要定义const常量,而要使用enum代替;
(1)使用const定义类内成员的限制在于:
首先,const数据成员不是编译期常量,是在类对象中分配存储空间的,编译器不知道const里的内容是多少。const数据成员一旦初始化即不能改变,且初始化必须在构造函数的初始化表达式列表中;
(2)编译期常量可以使用:
预处理定义#define,在类里定义enum, 在类里定义static const 数据成员;
其中static const 数据成员不属于单个类对象,而是属于整个类;
使用enum也不会占用对象中的存储空间,enum常量是在编译时被去全部求值的。C++中enum数据不支持++操作符,这一点与C不同;
选择static const数据成员还是enum数据成员区别:enum只能表示整数数据,static const 没有限制;
在一个类中使用static const,表示它既是常量(不会改变),又是静态的(整个类中只有唯一的定一点),所以其实一个编译时常量;
4. static成员:
类的静态成员拥有一块单独的存储区,所有类对象共享这一块静态存储区,为这些类对象提供了一种互相通信的方法;类的静态数据属于类,它的名字只有类的范围内有效;
静态成员变量的初始化只能在定义时,且一旦这些数据被定义,终端用户就不能再定义,否则连接器会报错;因此,保证定义只出现一次,且是由类的构造者来控制的。
静态数组的初始化:
e.g.
class Value{
static const int size;
static const float table[4];
static char letters[10];
};
const int Value::size =100;
const float Value::table[4] = {
1.1, 2.2, 3.3, 4.4
};
const char letters[10]= {
‘a’, ‘a’,‘a’,‘a’,‘a’,‘a’,‘a’,‘a’,‘a’,‘a’
};
对所有的静态数据,必须提供单一的外部定义,可以放在头文件中。
5. 静态成员函数:
(1)
静态成员函数 不能访问一般的非静态数据成员,也不能调用非静态成员函数。它
只能访问静态数据成员,
只能调用其他静态成员函数;
因为普通成员函数由默认的this指针(当前对象的地址),而static成员函数不属于任何类对象,因此没有this指针。因此静态成员函数无法访问一般的成员函数。