const用法总结

来源:互联网 发布:美国宏观经济数据 编辑:程序博客网 时间:2024/05/22 03:20

const修饰的常成员函数可以理解为是一个“只读”函数。
如果一定要修改常对象中的每个数据成员的值,对该数据成员函数声明为mutable,如:

    mutable int count;

把count声明为可变数据成员,即可改变。

const修饰指针

情况1:

const位于*号左边,const修饰指针所指向的变量,即指针指向为常量,可以先不进行初始化

int b = 500;const int *a = &b;int const *a = &b;//指针所指向的内容为常量,内容不能被改变int b = 500;const int *a = &b;*a = 600; // 错误//改变的方法int b = 500;const int *a = &b;b = 600;//或者int b = 500, c = 600;const int *a = &b;a = &c;

情况2:

const 位于*号右边,const修饰指针本身,即指针本身是常量,定义时必须同时进行初始化

int b = 500;int * canst a = &b;//指针本身是常量,但指针指向的内容不是常量;int b = 500;int * const a;//错误,未初始化int * const a = &b;*a = 600;//正确,允许改值cout<<a++<<endl;//错误

情况3:

*号两边均有const修饰,指针本身和指向的内容均为常量,均不能改变,定义时必须同时进行初始化

int b = 500;const int * canst a = &b;

const成员函数实例:

class Point{    int xVal, yVal;public:    int GetY() const;};//关键字const必须用同样的方式重复出现在函数实现中int Point::GeyY() const{    return yVal;}

面试·const与#define的区别:

C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多优点:

  • const 常量有数据类型,而宏常量没有。编译器对前者进行类型安全检查,而后者只是进行字符替换,没有类型安全检查,且在字符替换中可能产生错误(边际效应);
  • 有些集成化的调试工具可以对const常量进行调试,但不能对宏常量进行调试。在c++中const常量完全取代宏常量。

参考:
程序员面试宝典
C++面向对象程序设计