2010-12-08 85 views
9

我可以在C++中聲明一個非成員函數(全局函數,可能)爲const嗎?我明白const關鍵字實際上應用於在成員函數中傳遞的隱式「this」參數。也因爲只有成員函數遵循「thiscall」調用約定,const可以用於非成員函數嗎?我可以在C++中聲明一個非成員函數const嗎?

撇開我試圖通過聲明非成員函數const來做的事情,編譯器會報告錯誤嗎?

+6

「撇開......」我不明白它是如何放在一邊的,真的。至於編譯器是否會報告錯誤,爲什麼不只是**嘗試**? – 2010-12-08 12:02:01

+0

@Karl Knechtel:因爲有些編譯器可能(理論上)發出警告而不是錯誤,或者接受它作爲擴展? – MSalters 2010-12-08 14:28:25

+0

@Karl:gcc擁有這個任務的`__pure__`和`__const__`屬性,並且它們是屬性,因爲它們是非標準的。 – 2010-12-08 14:53:45

回答

15

不,只有非靜態成員函數可以const合格。

你對常量非成員函數的期望是什麼?如果你想強制沒有參數被函數修改,只需通過const引用。

0

要回答第二個問題:試圖對非成員使用成員函數語法(即void foo() const;)是語法違規。因此,編譯器必須提供診斷信息 - 無論是錯誤還是警告。它可能不會默默地忽略const。但是,它可能會報告警告,然後假裝const不在那裏並生成可執行文件。