C++中關於string類型究竟能不能用cout輸出的問題

 

今天在visual studio 學習c++的string類,發現string的不能用c++的cout函數來輸出,後來查了下網上的資料發現應該是能夠的,最後才發現本身沒有進行導入c++的默認的string的頭文件,因此它默認的使用cout不能夠使用,編譯時出現這樣一個錯誤:linux

error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is ios

no acceptable conversion)c++

答案:首先得說這個問題的答案是確定的,cout重載了string類型,因此在c++ 中能夠直接輸出。數組

先來看CString、string和string.h這幾個區別:函數

CSting:CString是MFC或者ATL中的實現,是MFC裏面封裝的一個關於字符串處理的功能很強大的類,只有支持MFC的工程才能夠使用。如在linux上的工程就不能用CString了,只能用標準C++中的string類了。在MFC中使用不須要本身加,但在另外的程序中須要加入#include<CString>。學習

string:string類既是一個標準c++的類庫,同時也是STL(Standard Template Library,標準模版庫)中的類庫,已經歸入C++標準之中。它和CString有本質的區別。spa

string.h:C語言裏面關於字符數組的函數定義的頭文件,經常使用函數有strlen、strcmp、strcpy等等,這個頭文件跟C++的string類半點關係也沒有,因此 <string>並不是 <string.h>的「升級版本」,他們是毫無關係的兩個頭文件。htm

綜上,cout函數重載的是string類庫中的string類型,而不是CString或string.h中的。字符串

例:get

1 #include<iostream>
 2 #include<CString>
 3 //#include<string.h>
 4 
 5 using std::cout;
 6 using std::string ;
 7 using std::endl;
 8 
 9 main()
10 {
11     string a;
13     a="*******";
15     cout<<a<<endl;
16 }

 

當編譯這個程序時,會出現這樣的如上的error,而若是把上面的頭文件改成#include<string>時,error就會消失。

而在MFC中或你包含的是CString頭文件,若是想用cout輸出string 類型,則須要先把string類型轉換char*型,如上面例子:

1 #include<iostream>
 2 #include<CString>
 3 
 4 using std::cout;
 5 using std::string ;
 6 using std::endl;
 7 
 8 main()
 9 {
10     string a;
11     a="*******";
12     char* b=(char*)a.c_str(); //將string類型轉爲char*
13     cout<<b<<endl;
14

總結:參考了網上的一些資料之後,其實就是使用對 你想用的函數方法、類的時候,須要對號入座,以爲這樣避免一些比較低級的問題。

相關文章
相關標籤/搜索