C++中的const

对于 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成员的初始化。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值