您的位置:首页 > 编程语言 > C语言/C++

c++ 关于const的理解

2017-01-19 08:56 246 查看
首先,const意味着“只读”。

个人理解:c++中,const修饰的对象可以分为两类:a、类似于c语言中的普通数据;b、类的对象和成员函数。

一、修饰普通数据变量

其实,第一类尤其容易理解错误的是:指针常量和常量指针。本文用于帮助区分二者。实际上,通过中文的语法重点,也可以理解它们两个所强调的重点。个人认为,中国人通常喜欢将重要的东西放在后面。所以,上面两个术语其实分别强调了常量和指针。指针常量意在强调常量。常量指针意在强调指针

指针常量:强调常量,意思就是这个指针本身是个常量,所以也就应该写成:
int * const p; 

  理解的时候可以划分为:(int *)(const p);

常量指针:强调指针,意思是这是个指针,不过“它的指向”是个常量,所以写法应该是:
     const int *p;

  理解的时候可以划分为:(const int)(* p);

二、修饰类的对象

1、修饰对象

一个类的对象可以用const修饰,如果一个对象被声明为const,那么就不能通过该对象调用类的非const成员函数。
如果在类内定义了const数据成员,那么该成员的初始化必须在构造函数内进行,且初始化后不能被修改。所以,如果不在构造函数内初始化,它是没机会被修改的。const static 类型的除外,它必须在类内直接初始化。
const必须在构造函数内初始化,且不能使用赋值的方式(=),const数据成员的初始化必须在函数的初始化列表的表头给出,由冒号引出,如果有多个则使用逗号隔开。

class Myclass

{

private:

int temp;

const int x;

const int y;

public:

Myclass(int);

};

Myclass::Myclass(int):x(10),y(20){temp=30}

const数据成员只能被构造函数和析构函数修改。

2、const修饰成员函数

const成员函数可以访问const数据成员和static静态成员函数。不能访问非const成员函数。
static静态成员函数不能调用const成员函数,因为const成员函数虽然特殊,但是仍然是类的成员函数,是类对象相关的,属于具体的某个对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: