2010-11-14 78 views
4

我感到困惑的C++常量對象困惑常數C++對象的

當我們通過一個const對象的常量對象/引用意味着我們不能編輯屬性值該對象的

,或者如果它不是什麼平均值或在constant是「參考」對象」或‘屬性’

也當我們返回一個常量對象

聲明函數像

return_type function_name(parameters) const 
{ 

} 

const關鍵字在函數的末尾是它的語法嗎?爲什麼如果我們返回const對象不應該是像如下

const return_type function_name(parameters) 
{ 

} 

很抱歉,如果它是一個noob問題;)

+0

閱讀[this](http://www.parashift.com/c++-faq-lite/const-correctness.html)。它會幫助你。 – 2010-11-14 16:51:51

回答

6

這句法:

return_type function_name(parameters) const 
{ 

} 

表示function_name()可以被調用對於const類的一個實例。它對返回值的常量沒有任何影響。

const return_type function_name(parameters) 
{ 

} 

...表明,從function_name()返回的值是常量(以及任何關於調用其成員函數的對象的常量性說。)

+0

感謝什麼樣的場景,我們應該使功能「不變」? – Sudantha 2010-11-14 16:27:54

+0

@Sundantha在您想要在常量實例上調用方法的場景中。從另一個角度來看,所有不改變對象狀態的方法都應該是不變的。 – 2010-11-14 16:31:17

3

當我們已通過常量對象的常量對象/引用是否意味着我們無法編輯該對象的屬性值?

是的。如果函數是const,那麼該函數不能修改該類上的任何非可變字段。 (或者調用該類的任何其他非const方法)。

,爲什麼如果我們返回一個const對象不應該是像如下

因爲返回類型可以是常量了。考慮以下幾點:

#include <string> 

class MyClass 
{ 
    std::string data; 
public: 
    void SetData(const std::string& content) 
    { 
     data.assign(content); 
    } 
    const std::string& GetData() const //Note that the function is const, and so 
    {         //is the reference it returns. 
     return data; 
    } 
}; 

需要注意的是,我們正在返回一個const參考內部成員。如果我們返回非const引用,那麼某人將能夠使用該引用來修改該類的私有成員,在這種情況下爲MyClass::data

+0

謝謝!這很有幫助! – Sudantha 2010-11-14 16:28:24

+0

+1以獲得更好的解釋 – 2010-11-14 16:33:16

0

實際上,添加的const會將該方法的第一個「隱藏」參數從ClassType * const this更改爲const ClassType * const this