c++/《const关键字的用法》

一直以来都没有总结const修饰符的用法,总是感觉const的用法太多,要记住的情况太多,不能够掌握所有的情况,所以总是不了了之。但是如果没有彻底掌握const用法的话,心里总是感觉知识还欠缺很多,还要很多知识点没有掌握。如果自己真正的总结完之后,其实也只有这么多用法。

const修饰数据成员,成员函数,类对象。

 

  • const修饰数据成员

修饰数据变量,保证数据变量只能在定义的时候进行初始化,并且在程序的执行过程中不能被再次赋值。

1、修饰类中的数据成员变量,可以直接在声明的时候进行初始化(const int num = 100;),不过最好还是在构造函数的初始化列表中进行初始化(必须用初始化列表进行初始化)。

 

[cpp] view plain copy

  1. class A  
  2. {  
  3. public:  
  4.          A(int val):num(val){ }  
  5. private:  
  6.          const int num;//const成员变量  
  7. };  

 

2、也可以在程序中定义const变量。const int num = 100;//比如在定义全局const变量num=100;

3、const int num = 100;等价于int const num = 100;

也就是说const int 和int const意思相同。

 

  • const修饰成员函数

1、const修饰成员函数的返回类型

[cpp] view plain copy

  1. class A  
  2. {  
  3. public:  
  4.          A(int val):num(val){ }  
  5.          const void fun(int val){  
  6.              cout << "num = " << num << endl;  
  7.              age = val;  
  8.          }  
  9. private:  
  10.          const int num;//const成员变量  
  11.          int age;  
  12. };  

 

此时const的位置有下面两种等价的情况:

const void fun ();

void const fun ();

 

2、const修饰成员函数的形参变量

 

此时const的位置有下面两种等价的情况:

void fun(const int val);

void fun(int const val);

 

3、const直接修饰成员函数

const放在函数声明之后,函数实现之前。void fun(int val)const;

const此时保证不会修改该对象的数据成员。

 

下面的例子是错误的,因为fun是const成员函数,它不能修改对象的成员变量age;

[cpp] view plain copy

  1. void fun(int val)const{  
  2.      cout << "num = " << num << endl;  
  3.      age = val;//此时是错误的。  
  4. }  

 

(1):const成员函数此时能访问const和非const数据成员。但不能修改非const数据成员。

(2):const成员函数中只能调用其它const的成员函数。

(3):void fun(int val)const;和void fun(int val);两个函数构成重载函数。

const对象只能调用const成员函数。

非const对象会优先调用非const成员函数,但是如果fun函数只有const函数,那么非const对象也会调用const成员函数。(但是该非const成员函数中不能修改对象成员变量)

 

 

  • const修饰类对象

定义一个const对象a:const A a(100);

const修饰函数,是从函数的层面,不修改数据。

const修饰类对象,是从对象的层面,不修改数据,只能调用const成员函数。

 

const对象只能调用const成员函数。

非const对象会优先调用非const成员函数,但是如果fun函数只有const函数,那么非const对象也会调用const成员函数。(但是该非const成员函数中不能修改对象成员变量)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值