2009-10-26 503 views
4

是否需要類型說明符?const是否需要類型說明符?

const c = 7; 

Bjarne Stroustrup的「C++編程語言」第80頁說這是非法的。但是,我一直在練習一些brainbench測試,其中一個問題表明類型默認爲int。 Brainbench通常是正確的,所以我不確定哪個參考是正確的,而且我一直無法找到標準中的任何內容。有沒有人有明確的答案和參考?

回答

14

int的缺省類型對C有效,但對C++不適用。即使在C中,也應該避免這種編碼風格。另外請注意,Bjarne Stroustrup的書是標準C++最權威的參考書之一。

+4

當然是最權威的標準本身。 – MSalters 2009-10-26 10:52:32

+0

@ MSalters同意。修改了帖子以反映這一點。 – 2009-10-26 10:59:48

+0

這似乎是一個恥辱,這是不合法的代碼,因爲C++ 0x(草案)標準正在走向類型推斷: auto x = 7; // x被推斷爲typeof(7)的一個int 有關Bjarne常見問題的更多信息:http://www.research.att.com/~bs/C++0xFAQ.html#auto – JBRWilkinson 2009-10-26 11:22:23

2

我不能說話的標準......但只看const c = 7;聲明糟糕的代碼風格給我。至於編譯器的兼容性......它可能會被誤解。編譯C++文件(.cpp擴展名)時,Microsoft Visual Studio的編譯器將不會有任何部分,但在編譯C文件(.c擴展名)時不會扼殺它,主要是因爲C標準允許默認變量爲int當沒有指定類型時。

+1

不幸的是,這些類型的測試要求極其深奧的東西,如果您正在編寫代碼,您將永遠不會依賴這些事實(如果您瞭解它,幾乎可以肯定下一個人將不會!) – Taras 2009-10-27 01:41:52

3

對於C++,我會相信Stroustrup在任何地方,而不是標準。

也許問題是關於C而不是C++?

draft C++0x standard第7.1.6說

至少一個類型SPECI網絡呃,是不是一個CV-合格音響ER在聲明中必需的,除非它聲明瞭一個構造, 析構函數或轉換function.83一type-speci fi er-seq不應該定義類或枚舉,除非它出現在別名聲明(7.1.3)的type-id中。