const用法总结

xiaoxiao2021-02-28  91

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++面向对象程序设计

转载请注明原文地址: https://www.6miu.com/read-68416.html

最新回复(0)