日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

Advanced C++ -- Logic Constness and Bitwise Constness

發(fā)布時(shí)間:2023/12/2 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Advanced C++ -- Logic Constness and Bitwise Constness 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先介紹一下什么是Logic Constness和Bitwise Constness,Logic Constness指的是function 后的const修飾,我們只知道這個(gè)function被const修飾了,但是并沒有任何變量被const,Bitwise Constness指的是變量(指針,或者引用等,基本上任何的二進(jìn)制儲(chǔ)存值)被const修飾,那么我們下面就用例子來(lái)進(jìn)行探索。

#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函數(shù),因?yàn)檫@個(gè)函數(shù)不對(duì)對(duì)象的數(shù)據(jù)進(jìn)行任何修改,所以我們將其修飾為const,一開始我們注釋掉前兩句,只有return v[index]; 發(fā)現(xiàn)程序編譯通過(guò),因?yàn)闆]有任何修改實(shí)例變量的操作,但是如果我們注釋掉第一行,也就是accessCounter++; 我們就會(huì)發(fā)現(xiàn),程序編譯報(bào)錯(cuò)了,報(bào)錯(cuò)的原因就是getItem是Logic Const的函數(shù),所以里面不能夠?qū)ψ兞窟M(jìn)行修改,因?yàn)檫@樣就是打破了Bitwise Constness,但是是不是我們就不能對(duì)accessCounter進(jìn)行修改呢?其實(shí)并不是,大致有兩種方法可以對(duì)其進(jìn)行修改:

  • 使用mutable,在變量前面使用mutable進(jìn)行修飾,這樣就可以在const修飾的函數(shù)中進(jìn)行修改。
  • 還有一種C++方式,但是并不推薦的就是,使用const_cast對(duì)變量的const屬性進(jìn)行cast,這樣就可以進(jìn)行修改而不報(bào)錯(cuò),但是此方法還是不推薦的,實(shí)際上在實(shí)際開發(fā)中,const修飾function的目的就是控制其不能修改變量值。
  •   再解答一下Quiz的一長(zhǎng)串const修飾到底意味著什么:

  • func的返回值為const的int值,其值為const,指針也為const,表示value和pointer都不可更改
  • func的參數(shù)是一個(gè)指向const integer的const指針的引用
  • func也是一個(gè)const function,說(shuō)明不能直接對(duì)類中的變量進(jìn)行修改,并且只能調(diào)用其他const函數(shù)
  • 總結(jié)

    以上是生活随笔為你收集整理的Advanced C++ -- Logic Constness and Bitwise Constness的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。