对于 const int i=10; 有人说i是常量,有人说i是只读变量,那么这两种说法到底有什么区别呢?
(1)如果说是常量,则诸如int array[i];之类的数组定义就是合法的
(2)如果说是只读变量,则int array[i];是不合法的,因为i是只读变量,只读变量也是变量,而数组定义的元素个数说明必须是常量或常量表达式。
至于int array[i];到底合不合法,要看是什么编译器。
const在c++中主要有const常量(我用的是vs平台,所以称之为常量),const引用,const成员函数,const成员。
(1)const常量就是const int i=10;这样定义的,在定义时必须进行初始化,在这里i和普通变量的区别除了初始化后值不能改变外,还有一个很重要的区别:如果是在函数外定义int i;则i默认是全局变量,所以不能将int i之类的定义放在头文件中,不然会出现重复定义错误;而如果在函数外定义const int i=10;i默认是只有文件作用域的。因此可以将其放在头文件中,被多个源文件包含也不会产生重复定义错误,如果想使其具有全局作用域,必须在定义时加extern,比如 extern const int i=10;
(2)const引用是指指向const常量的引用,也就是说只要是常量就可以被const引用引用,包括用const定义的常量、字面值,比如下面的语句都是合法的:
const int i=10;
const int & b=i;
const int & c=452;
但是下面的语句是否合法呢?
int i=9;
const int & a=i;
有点基础的人都应该知道是合法的,所以准确的说const引用应该成为自以为是指向const常量的引用。
另外值得注意的一点是:
double i=10.3;
const int &v=i; // 不会出错
int & a=i; // 出错
(3)关于常成员函数,要注意的是const对象只能调用const成员函数,const成员函数也只能调用const成员函数。
(4)至于const成员,必须在定义对象时初始化,这里就要注意初始化和赋值的区别。一般都是用初始化列表进行const成员的初始化。
4919

被折叠的 条评论
为什么被折叠?



