免费网站根目录,中原区建设局网站,wordpress 文档下载,手机排行榜2022最新首先介绍一下什么是Logic Constness和Bitwise Constness#xff0c;Logic Constness指的是function 后的const修饰#xff0c;我们只知道这个function被const修饰了#xff0c;但是并没有任何变量被const#xff0c;Bitwise Constness指的是变量#xff08;指针#xff0… 首先介绍一下什么是Logic Constness和Bitwise ConstnessLogic Constness指的是function 后的const修饰我们只知道这个function被const修饰了但是并没有任何变量被constBitwise Constness指的是变量指针或者引用等基本上任何的二进制储存值被const修饰那么我们下面就用例子来进行探索。 #includeiostream
#includevector
#includestring
using namespace std;class BigArray{vectorint v;int accessCounter;int *v2;public:int getItem(int index) const{//accessCounter;const_castBigArray*(this)-accessCounter;return v[index];}void setV2Item(int index, int x){*(v2index) x;}// Quiz:const int* const fun(const int* const p) const{//return accessCounter;}
};int main(){BigArray b;
} 首先我们看getItem函数因为这个函数不对对象的数据进行任何修改所以我们将其修饰为const一开始我们注释掉前两句只有return v[index]; 发现程序编译通过因为没有任何修改实例变量的操作但是如果我们注释掉第一行也就是accessCounter; 我们就会发现程序编译报错了报错的原因就是getItem是Logic Const的函数所以里面不能够对变量进行修改因为这样就是打破了Bitwise Constness但是是不是我们就不能对accessCounter进行修改呢其实并不是大致有两种方法可以对其进行修改
使用mutable在变量前面使用mutable进行修饰这样就可以在const修饰的函数中进行修改。还有一种C方式但是并不推荐的就是使用const_cast对变量的const属性进行cast这样就可以进行修改而不报错但是此方法还是不推荐的实际上在实际开发中const修饰function的目的就是控制其不能修改变量值。 再解答一下Quiz的一长串const修饰到底意味着什么
func的返回值为const的int值其值为const指针也为const表示value和pointer都不可更改func的参数是一个指向const integer的const指针的引用func也是一个const function说明不能直接对类中的变量进行修改并且只能调用其他const函数