2011-03-04 70 views
15

可能重複:
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) { 

} 
+2

一定要成爲一個笨蛋,但比尋找更容易回答。這意味着成員函數可以在const對象上(或通過引用或指向const的對象)調用,並且成員函數不能修改數據成員(除非它們被標記爲「mutable」)。實際上,它使'this'成爲函數中的一個指向const的指針。通常你會說「FUNCTION是一個const成員函數」,但是不記得該術語是否在標準中。 – 2011-03-04 23:58:05

+0

@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

+0

@sbi:嗯,我當然不會輸入120wpm,所以你贏了。如果只是我計算了多久才能輸入評論,我們會知道多少。但是,如果您的戰略不是常見問題解答條目,那麼您的戰略就無法奏效,那麼如何解決這一風險呢? – 2011-03-05 00:20:34

回答

17

這意味着此函數不會修改對象的可觀察狀態。

在編譯器術語中,這意味着您不能在const對象(或const引用或const指針)上調用函數,除非該函數也被聲明爲const。另外,被宣佈爲const的方法不允許調用不是的方法。

更新:爲Aasmund完全正確添加,const方法是允許更改成員的值聲明爲mutable

例如,通過只讀操作(例如int CalculateSomeValue() const)緩存其結果是有意義的,因爲調用代價昂貴。在這種情況下,您需要有一個mutable成員才能將緩存結果寫入。

我對遺漏表示歉意,我正在努力加快速度並達到要求。 :)

+1

+1表示「不修改可觀察狀態」公式。只是要詳細說明:任何標記爲'mutable'_may_的成員仍然可以通過'const'函數進行修改。出於這個原因,'mutable'只能用於內部簿記,不會對外界「看得見」。 – 2011-03-05 00:01:48

2

表示該函數不會修改任何成員變量或調用任何非const成員函數。

如果您有一個const引用/指向該類實例的指針,則只能調用標記爲const的函數。

1

這意味着該方法是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. 
} 
2

const在函數的結束意味着它是不會修改它被調用時上(即,this)的對象的狀態。

type CLASS::FUNCTION(int, const char*) const ; // Method Signature 

type CLASS::FUNCTION(int var1, const char* var2) const { 

} 

您還需要在方法定義的末尾提到關鍵字const。另請注意,只有成員函數在其末尾可以包含這個非修飾符關鍵字const

+0

+1先回答整個問題。 – aschepler 2011-03-05 00:08:28

相關問題