簡體   English   中英

C ++中const和非const函數之間的區別

[英]Difference between a const and non-const function in C++

我一直在閱讀一本C ++書籍並發現了這兩個函數:

    int &Array::operator []( int subscript ) // first
        {
            //code

            return ptr[ subscript ]; 
         }

 int Array::operator[]( int subscript ) const //second
{
    //code

    return ptr[ subscript ]; // value return
}

我們的想法是創建一個Array對象並訪問一些私有成員,例如:

Array myArray;
cout << myArray[ 2 ];

但是我沒有區分這些函數,主要是因為每當我輸入類似“cout << myArray [2]”的東西時,第一個函數被調用。 那么,第二個函數何時被調用? 第二個功能是否有效?

由於您聲明了一個可變的Array實例,因此使用了第一個函數。

您需要一個const實例才能使用第二個實例:

const Array myArray;

// As this is const, only the second function can work
cout << myArray[2];

如果你仔細閱讀了函數簽名,那么第二個函數簽名就是const ,這意味着它適用於const實例。 通常,如果沒有定義非const版本,那么這將是一個將運行的版本,但是當你已經不再使用另一個版本時,那就是那個被調用的版本。

第一個函數允許變異,因為它返回一個引用而不是一個副本:

myArray[2] = 5;

它實際上改變了數組的位置。 const版本不允許這樣做,而是獲得臨時值。

非靜態函數后面的const限定函數中的this指針。 因此,在此函數中出現的成員變量無法修改。 const限定的成員函數提供了有關它的更多細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM