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成员函数虽然特殊,但是仍然是类的成员函数,是类对象相关的,属于具体的某个对象。
个人理解: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成员函数虽然特殊,但是仍然是类的成员函数,是类对象相关的,属于具体的某个对象。
相关文章推荐
- 我的C++学习日记——关于const数值变量,指针和引用的理解
- 关于c++ const的理解
- 关于C++中const的理解
- C++中关于const的一些理解 (原作于08年11月20日)
- c++中const用法的理解
- 关于c++的静态数据(函数)成员的理解
- C/C++中关于CONST关键字的一点说明
- 关于c++ const 函数参数
- 深入理解c++中const的奥秘
- 理解复杂的C/C++声明 const, typedef , 函数指针
- 关于c++ 强制转换类型运算符 static_cast、dynamic_cast、reinterpret_和const_cast
- 关于C++ const 的全面总结
- 理解复杂的C/C++声明 const, typedef , 函数指针(转贴)
- 更深入一点理解switch语句及c/c++对const的处理
- 关于C++ const 的全面总结
- 关于学习C/C++的几点理解
- 关于c++ 强制转换类型运算符 static_cast、dynamic_cast、reinterpret_和const_cast
- C++学习(4)--基础知识(4)--关于const
- 关于C的关键字——const的理解和用法
- 关于C++中的const关键字的用法