當前位置:
首頁 >
Advanced C++ -- Logic Constness and Bitwise Constness
發布時間:2023/12/2
52
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Advanced C++ -- Logic Constness and Bitwise Constness
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先介紹一下什么是Logic Constness和Bitwise Constness,Logic Constness指的是function 后的const修飾,我們只知道這個function被const修飾了,但是并沒有任何變量被const,Bitwise Constness指的是變量(指針,或者引用等,基本上任何的二進制儲存值)被const修飾,那么我們下面就用例子來進行探索。
#include<iostream> #include<vector> #include<string> using namespace std;class BigArray{vector<int> v;int accessCounter;int *v2;public:int getItem(int index) const{//accessCounter++;const_cast<BigArray*>(this)->accessCounter++;return v[index];}void setV2Item(int index, int x){*(v2+index) = 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進行修改呢?其實并不是,大致有兩種方法可以對其進行修改:
再解答一下Quiz的一長串const修飾到底意味著什么:
總結
以上是生活随笔為你收集整理的Advanced C++ -- Logic Constness and Bitwise Constness的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 6.4安装pip,Cent
- 下一篇: C++ 异常 与 ”为什么析构函数不能抛