2012年4月4日 星期三

[筆記] const & const_cast

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [筆記] const & const_cast
 時間  2012/04/04 Wed 17:35:48
───────────────────────────────────────

不負責任聲明:以下憑印象+google寫成,有錯誤很正常 0rz

              如果有人願意指出錯誤,我會很感謝您的 <(_ _)>

--------------------本文開始分隔線--------------------

在先前的文章中有提到

指定運算元:A::operator =( const A& a ){}

     盡量加上 const     b:因為有加 const 的關係,可以保證在 function 內,
               ↓       ↓                                      B 值不會被更改
T& operator = const (T& b)
                     ↑
                      &:reference 有加的話效率較高?

當我們希望函數中不要更改任何的物件時

可以使用 const 來限制


    void mem_function() const
or
    get_XXX() const



但是有時候我們在函數中不得不去修改某物件的值時該怎麼辦呢?


    get_XXX() const
    {
        if(temp > 0)
        {
            temp = ???;
        }

        return temp
    }

我們可以使用 const_cast

來解除 const 不得更改物件狀態或值的限制


可是,這樣就造成矛盾了不是?

原先我們是為了不要修改到函數裡面的物件狀態而限制為 const

但是現在卻又把它給解除了

這樣不是很容易就會出現 bug 嗎?


所以 const_cast 盡可能不要用,或是完全不要用

可以將要修正的值,宣告成

mutable temp

即可

http://caterpillar.onlyfun.net/Gossip/CppGossip/constAndmuttable.html

而且盡可能的使用 const ,可以讓程式更少出錯且易於維護


--
▅◣ Origin:  謠 言 報  bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 219-85-0-189-adsl-nei3.dynamic.so-net.net.tw 發表
▋※ Modify: 2012/04/04 Wed 17:39:05

沒有留言:

張貼留言