Effective C++ 讀書筆記(五)

Effective C++ 讀書筆記(五)


版權聲明:本文為 cheng-zhi 原創(chuàng)文章舒岸,可以隨意轉載绅作,但必須在明確位置注明出處!

讓自己習慣 C++ - 條款 03

盡可能的使用const

const 允許你指定一個語義約束:指定一個對象不可被改變蛾派,下面是 const 的幾種常見的使用方法:

const 修飾指針
    char greeting[] = "Hello";
    // non-const pointer, non-const data
    char *p = greeting;
    // non-const pointer, const data
    const char *p = greeting;
    // const pointer, non-const data
    char *p const = greeting;
    // const pointer, const data
    const char * const p = greeting;
    // const iter, non-const data
    const std::vector<int>::iterator iter;
    // non-const iter, const data
    std::vector<int>::const_iterator iter;
const 修飾函數(shù)
  • const 修飾函數(shù)返回值
    // 將函數(shù)的返回值聲明為 const俄认, 可以防止返回值被惡意賦值
    const MyType function();
  • const 修飾函數(shù)參數(shù)
    // 表示參數(shù) x 在函數(shù)內部不能被改變
    MyType function(const int x);
  • const 修飾成員函數(shù)
    // 該成員函數(shù)可以操作 const 對象
    MyType function(const int x) const;

    // 兩個成員函數(shù)如果常量性不同,可以被重載
    char& operator[](std::size_t position) const;// 針對 const 對象
    char& operator[](std::size_t position); // 針對 non-const 對象

如何取消 const 屬性碍脏?

使用 mutable 去掉 const 屬性梭依。

    // 這個成員變量可以在 const 成員函數(shù)內被更改
    mutable bool flag;

如何在 const 函數(shù)和 non-const 函數(shù)之間避免代碼重復?

如果 const 函數(shù)和 non-const 函數(shù)的函數(shù)定義基本相同典尾,我們可以使用 non-const 函數(shù)來間接調用 const 函數(shù)來減少重復的代碼役拴,這其中涉及到兩次 const 轉型。

    // const 函數(shù)
    const char& operator[](std::size_t position) const
    {
        ...
    }
    
    // non-const 函數(shù)
    char& operator[](std::size_t position)
    {
        // 1. 將 *this 轉換成 const ClassName& 類型钾埂,使得后面的 [position] 得以調用到 const 版本的函數(shù)
        // 2. 從 const operator[] 中移除 const 屬性河闰。
        return const_cast<char&>(static_cast<const ClassName&>(*this)[position]);
    }
    

原則:

  1. 將事實上確實不可變的東西聲明為 const,可以幫助編譯器偵測出錯誤用法褥紫。
  2. constnon-const 成員函數(shù)的定義等價時姜性,讓 non-const 調用 const 可以避免代碼重復。

盡可能的使用 const

原文地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末髓考,一起剝皮案震驚了整個濱河市部念,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氨菇,老刑警劉巖儡炼,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異查蓉,居然都是意外死亡乌询,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門豌研,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妹田,“玉大人唬党,你說我怎么就攤上這事」碛叮” “怎么了驶拱?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沮趣。 經(jīng)常有香客問我屯烦,道長,這世上最難降的妖魔是什么房铭? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任驻龟,我火速辦了婚禮,結果婚禮上缸匪,老公的妹妹穿的比我還像新娘翁狐。我一直安慰自己,他們只是感情好凌蔬,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布露懒。 她就那樣靜靜地躺著,像睡著了一般砂心。 火紅的嫁衣襯著肌膚如雪懈词。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天辩诞,我揣著相機與錄音坎弯,去河邊找鬼。 笑死译暂,一個胖子當著我的面吹牛抠忘,可吹牛的內容都是我干的。 我是一名探鬼主播外永,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼崎脉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伯顶?” 一聲冷哼從身側響起囚灼,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祭衩,沒想到半個月后灶体,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡汪厨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年赃春,在試婚紗的時候發(fā)現(xiàn)自己被綠了愉择。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫乱。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡织中,死狀恐怖,靈堂內的尸體忽然破棺而出衷戈,到底是詐尸還是另有隱情狭吼,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布殖妇,位于F島的核電站刁笙,受9級特大地震影響,放射性物質發(fā)生泄漏谦趣。R本人自食惡果不足惜疲吸,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望前鹅。 院中可真熱鬧摘悴,春花似錦、人聲如沸舰绘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捂寿。三九已至口四,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秦陋,已是汗流浹背蔓彩。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踱侣,地道東北人粪小。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像抡句,于是被迫代替她去往敵國和親探膊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內容

  • 1. 讓自己習慣C++ 條款01:視C++為一個語言聯(lián)邦 為了更好的理解C++待榔,我們將C++分解為四個主要次語言:...
    Mr希靈閱讀 2,792評論 0 13
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,511評論 1 51
  • 1 讓自己習慣 C++ 條款01:視 C++ 為一個語言聯(lián)邦 將C++視為一個由相關語言組成的聯(lián)邦而非單一語言逞壁。在...
    暗夜望月閱讀 365評論 0 1
  • 一萬個冬天 聽你說。 溫暖的藤蔓 我重復了一千八百八十八次 會說話的人 對我說了一千八百八十八次 我沉默了一千八百...
    水檻閱讀 195評論 6 5
  • 如何看待省錢锐锣。 既不想丟面子腌闯,又想花得值,收藏了這些你就是人生贏家了雕憔。 一:我們要從我們的money...
    海螺茉茉閱讀 521評論 0 9