码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++——const用法完整总结

时间:2016-05-13 01:40:19      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

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

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

  • const修饰数据成员

修饰数据变量,保证数据变量只能在定义的时候进行初始化,并且在程序的执行过程中不能被再次赋值。
1、修饰类中的数据成员变量,可以直接在声明的时候进行初始化(const int num = 100;),不过最好还是在构造函数的初始化列表中进行初始化(必须用初始化列表进行初始化)。

class A
{
public:
         A(int val):num(val){ }
private:
         const int num;//const成员变量
};

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修饰成员函数的返回类型
class A
{
public:
         A(int val):num(val){ }
         const void fun(int val){
             cout << "num = " << num << endl;
             age = val;
         }
private:
         const int num;//const成员变量
         int age;
};

此时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;
void fun(int val)const{
     cout << "num = " << num << endl;
     age = val;//此时是错误的。
}

(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成员函数中不能修改对象成员变量)

C/C++——const用法完整总结

标签:

原文地址:http://blog.csdn.net/linux_ever/article/details/51344535

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!