2010-03-30 84 views
14

我在看一個成員函數靜態函數VS const函數

int funct(int x) const; 

而且我想知道如果

static int funct(int x); 

會更好。

如果成員函數不使用任何成員變量,它應該是靜態的。有沒有什麼會阻止這一點?

+0

我的一個研究表明const方法允許多態性。這太有趣了。思考? – baash05 2010-03-30 01:52:36

+0

爲什麼這是社區Wiki? – Uri 2010-03-30 02:18:23

+0

因爲沒有真正的答案。 (超出了我的伴侶提議的),我不喜歡有額定的問題。在過去,技術性問題已經使我失去了一些觀點。 我不會對我的個人觀點發出噓聲,但我覺得個人無效。 如果我問T | S | A,我輸了。如果我問一個「你最喜歡什麼......」,我就會獲益。我的理解是社區維基只留下我的觀點。 – baash05 2010-04-14 23:13:07

回答

18

假設這是C++,聲明爲const的函數表示它不打算更改調用它的實例上的數據成員,即該指針。既然有辦法迴避這個問題,這不是一個保證,而只是一個聲明。

靜態函數不能在特定的實例上運行,因此不需要「this」指針。因此,它是非常天真的「常量」。

如果你的方法不需要被綁定到一個特定的實例,那麼使它成爲靜態是有意義的。然而,如果你的方法是多態的 - 也就是說,你提供了一個基於調用它的對象實例的不同實現,那麼它不能是靜態的,因爲它依賴於特定的實例。

+0

是的。我和我的同事聊了聊,然後我們也想到了同樣的想法。謝謝。 – baash05 2010-04-14 23:17:37

6

如果一個成員函數沒有使用任何成員變量,那麼通常值得提問:
「這首先需要成員函數嗎?」