C++FAQ

Sunday, January 29, 2006

 

C++ Headers是什麼?

Q: 標準之前(pre-standard)的傳統(traditional) C++ header是怎麼回事?

A: 傳統的C++ header定義classes, values, macros, 以及function,並且以.h做為副檔名(extension)。包括了非標準的STL header,也是以.h做為副檔名 (iostream.h, fstream.h, vector.h, ... 諸如此類),以及過去C的header也是 (stdlib.h, stdio.h, ... 諸如此類)。標準之前的header具有全域的 namespace (Pre-standard headers have all the code in the global namespace,不太確定怎麼翻這句。)

Q: C++的標準header是怎麼回事?

A: 就是那些已經被列入了C++標準的headers。


Q: 我怎麼知道某個header是不是C++的標準header?

A: 命名的方式和傳統的header命名是一樣的,只是去掉了'.h'的副檔名。比如說,'fstream.h'變成了'fstream','memory.h'變成了'memory',諸如此類。


Q: 'iostream.h'是怎麼回事?

A: 這個'iostream.h'從未成為官方的C++標準,這代表任何實作iostream.h的C++ compiler,可以依著它想要的方式去做,而這樣的compiler仍舊會被視為與C++標準相容的。無論如何,C++標準有把input/output library列入其中。


Q: 傳統ANSI C的標準header是怎麼回事?

A: 傳統的ANSI C標準header是以'c'字母為開頭。因此,如'stdio.h'就變成了'cstdio','stdlib.h'就變成了'cstdlib','math.h'就變成了'cmath','time.h'就變成了'ctime',依此類推。以下是完整的列表:




Q: 哪一些是C++標準header?

A: 以下是列表:

語言支援:
動態記憶體管理: <new>
偵錯:
一般公用:
字串:
本地化:
容器:
演算法:
數值:
輸入/輸出:

Q: 我仍舊可以使用舊版的C header嗎 (stdlib.h, stdio.h, etc.)?

A: 所有與C++相容的compiler都支援上述那18個以'.h'做為結尾的header檔,即使它們是不被建議使用的 (stdlib.h, stdio.h, etc.)。這些*.h的 C header檔都是global namespace。使用這些版本的C header仍舊被視為具有可攜性的 (portability),但它有可能與未來的標準不相容。無論如何,這些header在未來不太完全可能被官方標準移除。


Q: 我仍舊可以使用那些非標準的,以'.h'做為副檔名版本的STL header嗎 (iostream.h, fstream.h, vector.h, etc.) ?

A: 這樣的STL header從未成為C++官方標準,大部份的C++ Compiler支援這樣非標準的header,也有些過時的Compiler(如Turbo C++)只支援這樣非標準的寫法。有些更新穎的Compiler,如VC++ 7.1已經不再支援這樣非標準的寫法。除非你必須要使用這些過時的Compiler,否則的話最好是使用標準的寫法 (<iostream>, <fstream>, <vector>, etc.)。使用*.h的寫法不好。

另外:

在某些Compiler上,你可以發現它同時有'iostream'以及'iostream.h'。如上所述,在include 'iostream'時那些成員(members)是在std namespace,而'iostream.h'是在global namespace。這可能會在某些時後造成混淆(ambiguities),namespace的設計就是為了避免這樣的情況。這也是建議不要使用*.h的原因之一。


Comments: Post a Comment



<< Home

Archives

January 2006   February 2006  

This page is powered by Blogger. Isn't yours?