2011-05-09 94 views
2
​​

在成員函數聲明中指定C是什麼意思?爲什麼在聲明成員函數時指定類名?

+1

我們之所以這樣做,是因爲它使得剪切/粘貼和定義/聲明之間的搜索更加容易。但是對於現代的IDE,沒有必要,現在它是非法的。 – 2011-05-09 21:26:49

+0

@Martin Becket:嚴格地說,即使在C++ 98中它也是非法的。即使有一段時間它是合法的,它一定是一些標準前的時期。 – AnT 2011-05-09 23:51:13

回答

4

你不應該這樣做。許多現代編譯器會將其視爲語法錯誤,例如,g ++ 4.2.1將會!

1

沒有意義,也沒有必要這樣做。由於Test的聲明在C聲明的範圍內,編譯器知道函數TestC的成員。

2

定義方法時之類的外部這只是neccessary:

class C : public B 
{ 
public: 
    void Test(); 
}; 

void C::Test() { ... } 
+0

但是,在你的例子似乎暗示的類定義中聲明它*時。 – 2011-05-09 21:24:05

+0

你是什麼意思(可能你指的是一個錯誤的帖子,我在發帖後不久編輯,實際上是從問題中複製粘貼並忘記刪除錯誤)。 – 2011-05-09 21:37:24

+0

是的,我提到了早期版本。現在看起來很好。 – 2011-05-09 22:21:47

2

不僅沒有一點上,它是非法的透頂(見8.3/1中的語言標準)。通常,在C++語言限定名是當你指的是先前聲明實體唯一允許的,但不是當您將引入一個新的實體(也有從這個規則有些例外,但他們都不在這裏適用)。

由於您的成員函數聲明無效,因此您發佈的代碼需要來自任何符合規範的編譯器的診斷消息。

+0

我知道這是非法的,但我無法找到原因。有沒有註釋,還是語法? – GManNickG 2011-05-09 22:20:47

+0

@GMan:它在8.3/1。基本上,限定名稱只能用於引用先前聲明的實體,而不能引入新的實體。另請參閱此缺陷:http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#482。舊的(有缺陷的)措辭更爲明確,但就這個例子而言,新措詞沒有什麼真正的改變。 – AnT 2011-05-09 23:16:17

+0

啊,我明白了。謝謝。 – GManNickG 2011-05-09 23:21:18