string和string.h的區別


頭文件string與string.h的區別

在C++中,#include<iostream>與#include<iostream.h>的區別,前者要使用更新的編譯器(其實大部分編譯器多比較前衛了,出了有些搞嵌入式的用變態的編譯器)。

喔,原來iostream是C++的頭文件,iostream.h是C的頭文件,即標准的C++頭文件沒有.h擴展名,將以前的C的頭文件轉化為C++的頭文件后,有時加上c的前綴表示來自於c,例如cmath就是由math.h變來的。

using namespace std //使用名字空間(使用所有)

using namespace std::cout//只使用cout

如不用using,則在代碼前可以用sdt::cout<<表示使用的是std中的cout。

#include<iostream.h>//必須要加上.h 
void main() 
{ 
cout<<"Right?"<<endl; 
} 

#include<string> 
#include<iostream>//此處必須去掉.h 
usingnamespace std ; 
void main() 
{ 
string s; 
getline(cin,s); 
cout<<"Right?"<<endl; 
}    

相關解析:

iostream.h里面定義的所有類以及對象都是在全局空間里,所以你可以直接用cout   
但在iostream里面,它所定義的東西都在名字空間std里面,所以你必須加上   
using namespace std才能使用cout

一般一個C++的老的帶“.h”擴展名的庫文件,比如iostream.h,在新標准后的標准庫中都有一個不帶“.h”擴展名的相對應,區別除了后者的好多改進之外,還有一點就是后者的東東都塞進了“std”名字空間中。 

但唯獨string特別。 
問題在於C++要兼容C的標准庫,而C的標准庫里碰巧也已經有一個名字叫做“string.h”的頭文件,包含一些常用的C字符串處理函數,比如樓主提到的strcmp。 
這個頭文件跟C++的string類半點關系也沒有,所以<string>並非<string.h>的“升級版本”,他們是毫無關系的兩個頭文件。 
要達到樓主的目的,比如同時:

#include <string.h> 
#include <string> 
usingnamespace std; 
或者 
#include <cstring> 
#include <string> 
其中<cstring>是與C標准庫的<string.h>相對應,但裹有std名字空間的版本。
最大的挑戰是把字符串頭文件理清楚:

<string.h>是舊的C 頭文件,對應的是基於char*的字符串處理函數;<string>是包裝了std 的C++頭文件,對應的是新的string 類(看下文);
<cstring>是對應於舊C 頭文件的std 版本。(包含std)

 

<string>是c++ 的頭文件,其內包含了一個string類,string s1就是建立一個string類的對象 
<string.h> 的c語言的東西 並無類,所以不能 string s1 

<cstring>文件實際上只是在一個命名空間std中include了 <string.h>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM