2009-06-20 68 views
3

我看到兩種風格用C定義的轉換運算符的過載++的,其是優選的:FOO(無效)或FOO()在C++

  1. operator int* (void) const
  2. operator int*() const

問題1。我認爲這兩種風格(是否添加void)具有相同的功能,對嗎?
問題2.任何更好的偏好?

+0

您的標題很具誤導性/無關緊要。像「哪些是首選的:foo(void)或foo()?」 – Dan 2009-06-20 19:55:10

+0

我同意。我已經編輯了標題。 – George2 2009-06-21 10:30:13

+0

這實際上是以前問的問題的副本:http://stackoverflow.com/questions/693788/c-void-arguments這有幫助嗎? – 2009-06-20 10:07:13

回答

10

這不僅適用於轉換運算符,還適用於C++中不帶參數的所有函數。就個人而言,我寧願省略void以保持一致性。

實踐起源於C.最初,當C沒有原型時,在函數聲明中使用了一對空的大括號,並且沒有提供關於函數期望的參數的任何信息。

當添加原型時,爲了靈活性和向後兼容性,函數聲明保留空括號以表示「未指定參數」。爲了提供明確的原型含義'不帶參數',添加了語法(void)

在C++中所有函數聲明都必須有原型,所以()(void)具有相同的含義。

+0

「當C沒有原型時」 - 你的意思是在過去,C不允許聲明一個函數原型?好奇。你能告訴我在這方面C多大的樣子嗎? :-) – George2 2009-06-20 10:27:41

4

在C++中foo()和foo(void)是相同的 - 「無參數」。在C99標準中,前者意味着「未定義的參數數量」,而後者意味着「沒有參數」。然而,如果你依賴C中的foo()行爲,你應該被槍殺。

所以這意味着你可以使用。現在,我個人喜歡foo()比foo(void)更好,因爲我討厭視覺混亂,但這只是偏好。我是一個Python傢伙:)

8

從ISO C++ FAQ報價,Should I use f(void) or f()?

C程序員經常使用f(void)聲明一個函數不帶參數的時候,但是在C++中被認爲是不好的風格。實際上,C++的創造者Bjarne Stroustrup,C的共同創始人Dennis Ritchie和Unix出生的研究部門主管Doug McIlroy稱這種f(void)風格被稱爲「可憎」。

如果你正在編寫C++代碼,你應該使用f()。在C++中,f(void)樣式是合法的,但只是爲了更容易編譯C代碼。

訴諸權威FTW :)

0

忽略的空白。在舊式C中,所有功能被假定爲int name(...)。指定void意味着它不是一個可變長度參數。那個默認值被刪除了,所有的函數都必須被指定(幸運的是,當任何東西都可以是任何東西的時候,它是狂野的西部)。在C++中,你不需要寫(無效)。省略它。就像C++庫一樣。

0

我相信'老'C(不知道什麼版本)foo()意思是'任何參數',而foo(void)意味着沒有參數。 foo()'任何參數'版本已被棄用我相信c99。

快速谷歌搜索發現this wikipedia文章提及類似的事實。

C++將接受foo(void),但它意味着與foo()相同,意思是'無參數'。

所以在C++中,首選的方法是使用foo()

相關問題