2013-10-25 50 views
0

我試着理解什麼不同,如果我添加const或在返回函數時忽略它。讓我通過一個例子來解釋我的問題。返回const或non-const在主要類型中有什麼區別C++

const int foo() 
{ 
    return 3; 
} 

int main() 
{ 
    int check; 
    check=foo(); 
    cout<<"before:"<<check<<endl; 
    check=1; 
    cout<<"after:"<<check<<endl; 
    return 0; 
} 

到現在爲止,我一直認爲,因爲我寫的常量富()我不能夠改變的檢查varaible,但是我編譯它,並沒有錯誤。

我想知道我通過在我的foo()函數之前編寫const獲得或放寬了什麼。

在此先感謝

+0

它曾經被建議這樣做,以避免意外地分配給返回臨時:'FOO()= 10; //無法編譯。現在建議不要這樣做,因爲它禁止移動語義(即它意味着你必須將整個返回的臨時文件複製到某個局部變量中,而不是竊取它。不是說它在原始情況下有所不同,但作爲一般規則這很好)。在你的情況下,'check'是非''constst',並且被賦予與'foo'返回的'const'臨時相同的*值*。 – BoBTFish

+0

可能duplicate的http://stackoverflow.com/questions/10177904/what-this-const-before-method-name-mean – Saqlain

+0

對於「可能」的相當嚴格的定義 - 這是一個確切的愚蠢。 –

回答

0

的差異以下編譯器警告:

warning: type qualifiers ignored on function return type [-Wignored-qualifiers] 
const int foo() 
      ^

live demo

這種類型的東西被忽略,所以它沒有效果。

+0

區別在於警告....非常不好的描述。你應該說爲什麼警告被拋出...... – dhein

+0

@Zaibis如果你真的讀了警告,它會告訴你爲什麼。 – rubenvb

+0

所以無論如何你應該提到它發生這種情況的原因是什麼。 – dhein

2

你沒有改變變量。你正在改變它的副本。

check=foo(); 

分配由foo返回到check值。 check不是const

0

它會讓差異時,你會嘗試返回引用。

例如:

int gGlobal; 

const int & func() 
{ 
    return gGlobal; 
} 

int main() 
{ 
    //Following statement will give error. 
    func() = 3; 
    return 0; 
} 
+0

這是完全不同的事情。 – jrok

+0

@jrok:當然不是,他是對的。 –

+0

@DídacPérez他是對的,但它與OP問題無關。 – jrok

相關問題