我看到兩種風格用C定義的轉換運算符的過載++的,其是優選的:FOO(無效)或FOO()在C++
operator int* (void) const
operator int*() const
問題1。我認爲這兩種風格(是否添加void
)具有相同的功能,對嗎?
問題2.任何更好的偏好?
我看到兩種風格用C定義的轉換運算符的過載++的,其是優選的:FOO(無效)或FOO()在C++
operator int* (void) const
operator int*() const
問題1。我認爲這兩種風格(是否添加void
)具有相同的功能,對嗎?
問題2.任何更好的偏好?
這不僅適用於轉換運算符,還適用於C++中不帶參數的所有函數。就個人而言,我寧願省略void
以保持一致性。
實踐起源於C.最初,當C沒有原型時,在函數聲明中使用了一對空的大括號,並且沒有提供關於函數期望的參數的任何信息。
當添加原型時,爲了靈活性和向後兼容性,函數聲明保留空括號以表示「未指定參數」。爲了提供明確的原型含義'不帶參數',添加了語法(void)
。
在C++中所有函數聲明都必須有原型,所以()
和(void)
具有相同的含義。
「當C沒有原型時」 - 你的意思是在過去,C不允許聲明一個函數原型?好奇。你能告訴我在這方面C多大的樣子嗎? :-) – George2 2009-06-20 10:27:41
在C++中foo()和foo(void)是相同的 - 「無參數」。在C99標準中,前者意味着「未定義的參數數量」,而後者意味着「沒有參數」。然而,如果你依賴C中的foo()行爲,你應該被槍殺。
所以這意味着你可以使用。現在,我個人喜歡foo()比foo(void)更好,因爲我討厭視覺混亂,但這只是偏好。我是一個Python傢伙:)
從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 :)
忽略的空白。在舊式C中,所有功能被假定爲int name(...)
。指定void意味着它不是一個可變長度參數。那個默認值被刪除了,所有的函數都必須被指定(幸運的是,當任何東西都可以是任何東西的時候,它是狂野的西部)。在C++中,你不需要寫(無效)。省略它。就像C++庫一樣。
我相信'老'C(不知道什麼版本)foo()
意思是'任何參數',而foo(void)
意味着沒有參數。 foo()
'任何參數'版本已被棄用我相信c99。
快速谷歌搜索發現this wikipedia文章提及類似的事實。
C++將接受foo(void)
,但它意味着與foo()
相同,意思是'無參數'。
所以在C++中,首選的方法是使用foo()
。
您的標題很具誤導性/無關緊要。像「哪些是首選的:foo(void)或foo()?」 – Dan 2009-06-20 19:55:10
我同意。我已經編輯了標題。 – George2 2009-06-21 10:30:13
這實際上是以前問的問題的副本:http://stackoverflow.com/questions/693788/c-void-arguments這有幫助嗎? – 2009-06-20 10:07:13