Posted on 2019-02-27 09:58
Prayer 閱讀(230)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
在C++中,#include<iostream>與#include<iostream.h>的區(qū)別,前者要使用更新的編譯器(其實(shí)大部分編譯器多比較前衛(wèi)了,出了有些搞嵌入式的用變態(tài)的編譯器)。
喔,原來iostream是C++的頭文件,iostream.h是C的頭文件,即標(biāo)準(zhǔn)的C++頭文件沒有.h擴(kuò)展名,將以前的C的頭文件轉(zhuǎn)化為C++的頭文件后,有時(shí)加上c的前綴表示來自于c,例如cmath就是由math.h變來的。
using namespace std //使用名字空間(使用所有)
using namespace std::cout//只使用cout
如不用using,則在代碼前可以用sdt::cout<<表示使用的是std中的cout。
1 2 3 4 5 | #include<iostream.h>//必須要加上.h
void main()
{
cout<< "Right?" <<endl;
}
|
1 2 3 4 5 6 7 8 9 | #include<string>
#include<iostream>//此處必須去掉.h
usingnamespace std ;
void main()
{
string s;
getline(cin,s);
cout<< "Right?" <<endl;
}
|
相關(guān)解析:
iostream.h里面定義的所有類以及對(duì)象都是在全局空間里,所以你可以直接用cout
但在iostream里面,它所定義的東西都在名字空間std里面,所以你必須加上
using namespace std才能使用cout
一般一個(gè)C++的老的帶“.h”擴(kuò)展名的庫文件,比如iostream.h,在新標(biāo)準(zhǔn)后的標(biāo)準(zhǔn)庫中都有一個(gè)不帶“.h”擴(kuò)展名的相對(duì)應(yīng),區(qū)別除了后者的好多改進(jìn)之外,還有一點(diǎn)就是后者的東東都塞進(jìn)了“std”名字空間中。
但唯獨(dú)string特別。
問題在于C++要兼容C的標(biāo)準(zhǔn)庫,而C的標(biāo)準(zhǔn)庫里碰巧也已經(jīng)有一個(gè)名字叫做“string.h”的頭文件,包含一些常用的C字符串處理函數(shù),比如樓主提到的strcmp。
這個(gè)頭文件跟C++的string類半點(diǎn)關(guān)系也沒有,所以<string>并非<string.h>的“升級(jí)版本”,他們是毫無關(guān)系的兩個(gè)頭文件。
要達(dá)到樓主的目的,比如同時(shí):
#include <string.h>
#include <string>
usingnamespace std;
或者
#include <cstring>
#include <string>
其中<cstring>是與C標(biāo)準(zhǔn)庫的<string.h>相對(duì)應(yīng),但裹有std名字空間的版本。
最大的挑戰(zhàn)是把字符串頭文件理清楚:
<string.h>是舊的C 頭文件,對(duì)應(yīng)的是基于char*的字符串處理函數(shù);<string>是包裝了std 的C++頭文件,對(duì)應(yīng)的是新的string 類(看下文);
<cstring>是對(duì)應(yīng)于舊C 頭文件的std 版本。(包含std)
<string>是c++ 的頭文件,其內(nèi)包含了一個(gè)string類,string s1就是建立一個(gè)string類的對(duì)象
<string.h> 的c語言的東西 并無類,所以不能 string s1
<cstring>文件實(shí)際上只是在一個(gè)命名空間std中include了 <string.h>