2015-02-09 165 views
1

我正在爲CS類創建一個任務,它使用const,我對於何時使用它們感到困惑。int const函數(參數),int函數(const參數)和int函數(參數)const之間的區別是什麼?

這3個功能有什麼區別?

int const function(parameters) 
int function(const parameters) 
int function(parameters) const 

在此先感謝!

+0

參見http://stackoverflow.com/questions/16449889/why-using-the-const-keyword-before -of-after-method-or-function-name – juanchopanza 2015-02-09 07:22:03

回答

1

考慮到你在談論c++

const int function(parameters) // instead of your int const function(parameters) 

將返回常到int

int function(const parameters) 

的參數將被視爲方法,這意味着他們將不會改變內是恆定的。

int function(parameters) const 

該功能不會改變任何類變量(如果該構件是不可變)

2
int const function(parameters) 

const是多餘的。聲明一個簡單的類型,如int作爲const返回值沒有用,儘管它可能有助於使代碼更加自我記錄。如果返回類型是引用或指針,那麼故事會改變。

int function(const parameters) 

parameters傳遞給functionconst,因此不能被修改。

int function(parameters) const 

function方法不修改任何成員變量的在其上調用它的對象實例。

+1

爲了擴展第一種情況,Effective C++(第三版)建議這樣做,以防止意外地分配給臨時表。但是,從C++!1開始,這種模式可以防止從臨時移動(不是'int'的問題,但可能是類的類型),所以不推薦使用。 – BoBTFish 2015-02-09 07:36:20

+3

Minor nitpick:一個const成員函數允許你修改可變數據成員,並且它不允許你調用非const成員函數,即使這些函數不修改任何不可變成員。 – juanchopanza 2015-02-09 08:28:30

+0

如果對象本身是const的,那麼你將無法通過它調用任何非const和非靜態函數。 – user3528438 2015-02-09 12:55:45

相關問題