C++const的多种用法
0. 寫在最前面
在看《effective C++》前覺得代碼都是自己寫的,加不加這些const修飾,注不注意格式都無(wú)所謂啦,反正自己知道。看完后印象比較深的兩點(diǎn),一個(gè)是你設(shè)計(jì)的類有可能會(huì)給別人用,你這些良好的習(xí)慣可以防止別人在用你的類的時(shí)候出現(xiàn)一些低級(jí)錯(cuò)誤,從而浪費(fèi)時(shí)間。多人合作的時(shí)候也能夠節(jié)省很多交流和統(tǒng)一意見的時(shí)間,一個(gè)合適的const使得代碼一目了然。二則,代碼會(huì)有版本更迭,再過一段時(shí)間,你或許會(huì)忘記自己當(dāng)初的想法,良好的習(xí)慣這個(gè)時(shí)候就能給自己節(jié)省很多時(shí)間。所以,在合適的地方加上合適的const吧
你的Star是作者堅(jiān)持下去的最大動(dòng)力哦~~~
在函數(shù)末尾
一般在類中使用,表明其是const成員函數(shù),不能修改成員變量,也即意味著不能調(diào)用非const成員函數(shù)。除非非靜態(tài)成員變量前面加上了mutable修飾符,表明其是多變的。
void print2() const{cout<<num<<endl; }在函數(shù)前面
修飾函數(shù)返回值為const類型,只能讀取,不能修改。
const bool is_man(){return true; } bool a = is_man();//error const bool b = is_man();//right作為函數(shù)參數(shù)
作為函數(shù)參數(shù)有三種形式,一種是普通的變量前面,如下面的第二個(gè)參數(shù)。一般只是起到警示的作用,因?yàn)樾螀⒈緛砭筒豢筛淖?#xff0c;函數(shù)內(nèi)部會(huì)再生成一個(gè)實(shí)參。第二種是指針,詳見下面指針部分的介紹。這里重點(diǎn)說下第三種,常引用,如下面函數(shù)第一個(gè)形參。一般用于數(shù)據(jù)量比較大的數(shù)據(jù)類型,不想生成實(shí)參的過程中產(chǎn)生大量的拷貝消耗,就只好用引用唄,又不想函數(shù)修改這個(gè)形參,那就加個(gè)const咯。
void saveImage(const Mat& m, const string path)在指針前后
如果是普通類型,那大家應(yīng)該都知道,表明這個(gè)變量是常量,不可變,如
const int kValue; int const kValue;但如果用const修飾的指針,const在前還是在后就差距很大了。
//kValue是常量指針,其指向的值不可變 const int* kValue; int const *kValue;//不建議這種寫法 //kPointer是常指針,指針本身不可變 int* const kPointer; //兩者都不可變 const int* const kPV修飾成員變量
同上面一樣,常量是需要在初始化時(shí)就賦值的,后面不能再修改。由于類的特殊機(jī)制,其初始化是在進(jìn)入類的構(gòu)造函數(shù)之前進(jìn)行的,所以其唯一的初始化方法就是使用參數(shù)初始化表的形式:
Box::Box(int h, int w, int t):height(h), width(w), kThreshold(t){}這里kThreshold就是類常量成員。
喜歡我的文章的話Star一下唄Star
版權(quán)聲明:本文為白夜行的狼原創(chuàng)文章,未經(jīng)允許不得以任何形式轉(zhuǎn)載
轉(zhuǎn)載于:https://www.cnblogs.com/HaoQChen/p/11048589.html
總結(jié)
以上是生活随笔為你收集整理的C++const的多种用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。