2013-01-14 148 views
1

可能重複:
is const (c++) optional?
Constant Member Functions爲什麼在void/int聲明後const?

我已經看到了不同的崗位各地約int a() const。我的問題正是我們爲什麼要將const關鍵字放在那裏?我知道它阻止了我們對該函數所在類的成員進行更改,但是又如何呢?

我們可以在函數上面寫一個註釋,並告訴編碼器不要在函數內部對類本身做任何修改,但爲什麼我們真的關心void聲明後的const?在哪種情況下可以有更好的方式來使用例如int a() const而不是int a(),並且編譯後的代碼是否完全改變?

回答

7

它確實有所作爲。考慮A是一個print()方法的類。然後此:

const A a; 
a.print(); 

只編譯被print被定義爲const

當然,主要原因是防止對類內的對象進行任何更改。該

我們可以只寫上面的函數的註釋,並告訴編碼器不使函數內部類本身的任何變化

是奢望。這並不是真的發生。所以如果有人沒有閱讀評論(或者做了並忽略它),你會得到編譯器錯誤。

optmization還有一個好處 - 編譯器可以更好地並行化const對象上的任務,因爲它可以假定它們在它們之間的操作之間不會發生變化。

2

聲明成員函數const的好處是,如果修改對象,編譯器將發出錯誤。因此,即使您偶然修改了對象,編譯器也會發現您的錯誤。

6

有兩種使用const功能三個基本原因:

1)C++只允許常量引用可以被綁定到的臨時。但是如果你沒有有用的const函數,const引用是沒用的。

2)一些庫,如C++標準庫,提供了只適用於const函數的特定語義保證。例如,您可以保證在標準集合中可以同時從多個線程訪問集合的常量函數。 3)它允許編譯器捕獲容易犯的錯誤。例如,如果您打算依賴C++標準容器保證,那麼如果使用const對象,則只能調用const函數。所以一個錯誤,說修改代碼忘記併發問題的人會在編譯時被捕獲。 (而不是當某人依靠你的程序來做真正的工作時。)

相關問題