C 基礎 為什麼不能cout乙個string?

2021-08-21 15:05:04 字數 1412 閱讀 8330

#includeint main(int, char**)

cout竟然不能輸出string型別,這太令人詫異了?究其原因,stl中的許多標頭檔案(這其中就包括,visual c++環境下)都包含std::basic_string類的定義式,因為它們都間接地包含了(但不要試圖直接包含)就可使用std::string類,

typedef basic_string, allocator>

string;

// string型別其實乙個類模板的特化版本的型別重定義

然而,問題在於與之相關的operator<<卻定義在標頭檔案,你必須手動地將之包含。 

所以,我們只需包含(也即對operator<<的包含)即可實現coutstd::string型別的輸出:

#include #include int main(int, char**)

以上的設定僅對visual c++環境有效,也即在大多數的stl的標頭檔案中,都包含了std::basic_string的定義式,僅通過對這些標頭檔案的包含即可使用std::string類,而想使用operator<<卻需手動包含標頭檔案。在重申一遍,這些包含和依賴關係僅對visual c++環境有效。

同樣的問題出現在將乙個string型別的輸入到乙個輸出檔案流時:

#include #include int main(int, char**)

檢視原始碼可知:

// iosfwd -> 被間接地包含在中

typedef basic_ostringstream,

allocator> ostringstream;

// xstring -> 被間接地包含在中

typedef basic_string, allocator>

string;

僅通過對檔案的包含,我們即可使用stringostringstream等類,然而當我們想使用其成員函式時,需要包含其最終的實現版。

#include

為什麼乙個例項只有乙個LGWR

昨天有人問為什麼只有乙個lgwr程序呢?在單例項中,確實只有乙個lgwr程序,在rac中,每個例項都有乙個lgwr程序。lgwr負責將redo log buffer中的資料寫入redo log file.即使你給日誌group 分配了多個member,也只有乙個lgwr去寫入。注意,多個日誌成員他們...

高低壓為什麼不能共地的乙個解釋

很多人都知道,當有高低電壓的時候,一般是不允許共地的,而是需要隔離開,比如我們常用的開關電源,它的輸入是220vac,輸出5vdc,其中的變壓器既是降壓,也起隔離作用。一般的講,電壓越高,隔離的距離越遠,有些因為體積版面考慮,不能做遠的,採用割空pcb方式,加大間距,這個的原因是pcb的材料一般是f...

我們為什麼選擇乙個產品

生活中總會面臨無數的選擇,尤其是在網際網路產品 手機等電子產品方面是品種 型號繁多,但是我們是根據什麼做出我們的選擇的呢,我覺得能分為以下幾點 首先,喜好。這個是很籠統的啦,每個人的喜好都不一樣,就像有人喜好黑色的衣服 有人喜好白色的等等各不一樣,這個可能是我們做出選擇的基礎吧。第二個,經濟能力。其...