可能重複:
What is the meaning of a const at end of a member function?「const」在函數定義的末尾是什麼意思(在上下文中)?
如果我的類定義如下:
type CLASS::FUNCTION(int, const char*) const
什麼是右括號後的最後一個常量的意思是,怎麼做我將其應用於該功能:
type CLASS::FUNCTION(int var1, const char* var2) {
}
可能重複:
What is the meaning of a const at end of a member function?「const」在函數定義的末尾是什麼意思(在上下文中)?
如果我的類定義如下:
type CLASS::FUNCTION(int, const char*) const
什麼是右括號後的最後一個常量的意思是,怎麼做我將其應用於該功能:
type CLASS::FUNCTION(int var1, const char* var2) {
}
這意味着此函數不會修改對象的可觀察狀態。
在編譯器術語中,這意味着您不能在const
對象(或const引用或const指針)上調用函數,除非該函數也被聲明爲const
。另外,被宣佈爲const
的方法不允許調用不是的方法。
更新:爲Aasmund完全正確添加,const
方法是允許更改成員的值聲明爲mutable
。
例如,通過只讀操作(例如int CalculateSomeValue() const
)緩存其結果是有意義的,因爲調用代價昂貴。在這種情況下,您需要有一個mutable
成員才能將緩存結果寫入。
我對遺漏表示歉意,我正在努力加快速度並達到要求。 :)
+1表示「不修改可觀察狀態」公式。只是要詳細說明:任何標記爲'mutable'_may_的成員仍然可以通過'const'函數進行修改。出於這個原因,'mutable'只能用於內部簿記,不會對外界「看得見」。 – 2011-03-05 00:01:48
表示該函數不會修改任何成員變量或調用任何非const成員函數。
如果您有一個const引用/指向該類實例的指針,則只能調用標記爲const
的函數。
這意味着該方法是const的,並且意味着該方法不會修改任何成員,因此可以在對象爲const的設置中使用它。
class Foo
{
public:
void foo(int a) { m = a; }
int bar() const { return m; }
private:
int m;
};
int baz(const Foo* ptr)
{
ptr->foo(10); // Not legal, Foo::foo is not const, and ptr is pointer to const.
return ptr->bar(); // Legal, Foo::bar is a const method, and does not modify anything.
}
成員函數,檢查,即讀取,而不是修改或寫入對象。以下鏈接對我有幫助。
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.10
const
在函數的結束意味着它是不會修改它被調用時上(即,this
)的對象的狀態。
type CLASS::FUNCTION(int, const char*) const ; // Method Signature
type CLASS::FUNCTION(int var1, const char* var2) const {
}
您還需要在方法定義的末尾提到關鍵字const
。另請注意,只有成員函數在其末尾可以包含這個非修飾符關鍵字const
。
+1先回答整個問題。 – aschepler 2011-03-05 00:08:28
一定要成爲一個笨蛋,但比尋找更容易回答。這意味着成員函數可以在const對象上(或通過引用或指向const的對象)調用,並且成員函數不能修改數據成員(除非它們被標記爲「mutable」)。實際上,它使'this'成爲函數中的一個指向const的指針。通常你會說「FUNCTION是一個const成員函數」,但是不記得該術語是否在標準中。 – 2011-03-04 23:58:05
@Steve:已在__ [FAQ條目]中得到解答(http://stackoverflow.com/questions/4059932/what-is-the-meaning-of-a-const-at-end-of-a-member -功能)__。我發現通過在瀏覽器的地址欄輸入'C++ - faq',我的地址欄[http://stackoverflow.com/questions/tagged/c++-faq](http://stackoverflow.com/questions/tagged/ c%2b%2b-faq),其中我搜索了'const',它給了我URL。少於30秒。 – sbi 2011-03-05 00:16:55
@sbi:嗯,我當然不會輸入120wpm,所以你贏了。如果只是我計算了多久才能輸入評論,我們會知道多少。但是,如果您的戰略不是常見問題解答條目,那麼您的戰略就無法奏效,那麼如何解決這一風險呢? – 2011-03-05 00:20:34