原創(chuàng) 轉(zhuǎn)載請注明出處
注明:以下所指的.h都是指代#include<>的尖括號中是否帶.h的問題 當用引號時瞪讼,帶什么取決于你的文件后綴名
【簡而言之】
C語言:C語言中的頭文件都會帶.h
C++98以前版本:仍然沿用著帶.h的C版本 以尋求兼容性
C++98以及以后:規(guī)定用戶最好使用新版本的頭文件(不帶.h的) 但是還是保留了.h以求和以前版本還有C代碼兼容
【深入探討】
這個問題里 C++之父B.S給出了他自己對于這個問題的看法:
"The committee decided that the .h was unnecessary to establish a connection between a compiler and its standard libraries, that removing it was a good way of eliminating compatibility problems with pre-standard versions of headers, e.g. "iostream.h" vs. <iostream>. Also, there were implementations that did not use ordinary character files to hold their standard headers (I don't know if there are any now).
The decision had nothing to do with templates.
I don't miss the .h. "
個人意見:我自己還是按照BS老人家的說法 去掉了.h
當然 如果去掉.h 會有一個問題 那就是當調(diào)用標準庫中的函數(shù)前 需要在每一個前面加上std::
或者在文件前直接加上using namespace std斤富;來表示全部標準庫的函數(shù)前都已經(jīng)自動加好呛伴。
原因如下:
C語言中 所有的函數(shù)都是全局函數(shù)
而到了C++中 函數(shù)都被定義在了名字空間std中 所以每當你使用的時候 需要加上他的名字 這類似于成員函數(shù)前也都有類的名字
也就是說 雖然不帶.h的 你需要在前面寫一句using namespace std; 但是這卻更加符合C++面向?qū)ο蟮某绦蛟O計
【 值得注意 】
引號中內(nèi)容引自:
http://club.topsage.com/thread-2271422-1-1.html
"另外绞吁,為了和C語言兼容,C++標準化過程中,原有C語言頭文件標準化后闸盔,頭文件名前帶個c字母,如cstdio琳省、cstring迎吵、ctime、ctype等等针贬。這些頭文件都可以在 C:\Program Files\Microsoft Visual Studio 10.0\VC\include 這個目錄下找到(以VC2010為例)击费。也就是說,我們?nèi)绻肅++標準化了的C語言頭文件桦他,就得作如下的轉(zhuǎn)換
include <stdio.h> --> #include <cstdio>
include <stdlib.h> --> #include <cstdlib>
include <string.h> --> #include <cstring>
還要提及的一點是蔫巩,我在看C++標準庫的時候,看到一個特殊情況 <memory.h> 和 <memory>快压,這兩個頭文件是完全不同的圆仔,因為我發(fā)現(xiàn) <memory.h>頭文件件包含了 <mem.h>;而 <memory> 包含 <memory.stl>"