std::basic_ostream
是否有超載operator <<
接受std::basic_string
對象?我正在閱讀cppreference,似乎沒有列出。std :: cout如何打印一個std :: string?
回答
在std
命名空間中定義了非成員操作符。見cppreference。
「全局」在命名空間'std' :)(http://en.cppreference.com/w/cpp/header/string) –
不,真的,你應該編輯你的答案。一個'std :: operator <<'與全局的'operator <<'不一樣。 –
想象一下,您可以創建自己的類,名爲Car
,其中包含車牌號碼,引擎的型號/功率以及其他信息。現在,想象一下,您想提供一種很好的方式將您的汽車信息打印到文件或屏幕中。
如果你想使用basic_ostream
重載,你沒有運氣,因爲你的類定義沒有超載。您可能會提供print_into_ostream
方法或其他一些巧妙的技巧,但您剛剛意識到std::string
也沒有適當的過載,並且您仍然可以執行cout << myStr;
。快速搜索後,您會發現應用到std::string
一個解決方案,您可以用它在你的類是這樣的:
class Car
{
std::string licence_plate, engine;
public:
// ... other here ...
friend ostream& operator<<(ostream& os, const Car& c);
};
ostream& operator<<(ostream& os, const Car& c)
{
os << c.licence_plate << "-" << c.engine;
return os;
}
現在你可以使用
cout << myCarObject << endl;
與任何內置類型。
std::string
使用相同的方法,你可以找到文檔here。
如果你要打印class A
的一個對象,你重載<< operator
這樣的:
ostream & operator << (ostream & os, A &a)
{
os << a.data_member;
}
在std namespace
同樣的方式有一個重載運算符,打印string
類的對象。
'A'應該是'const'限定的,函數必須返回'os'。 –
- 1. std :: cout將不打印
- 2. 爲什麼std :: cout打印4.9999999爲5?
- 3. 爲什麼代碼打印最後一個std :: cout?
- 4. 如何打印std :: maps的std :: set
- 5. 打印一個std ::陣列
- 6. 澄清使用std ::,std :: cout
- 7. std :: map <string,class>打印鍵值
- 8. 打印std :: string的字節表示
- 9. 如何將std :: cout消息打印到QLabel或QTextBrowser
- 10. 獲取cout輸出到std :: string
- 11. 如何打印std :: regex?
- 12. std :: cout << x;和std :: cout << x << std :: endl;?
- 13. 用std :: string打開一個文件
- 14. 「std :: string const」與「const std :: string」
- 15. CString to std :: cout
- 16. std :: chrono和cout
- 17. Cout在聲明一個std :: string變量後不給出輸出
- 18. 爲什麼std :: distance會打印一個`-`?
- 19. C++循環std :: vector <std :: map <std :: string,std :: string>>
- 20. 「std :: string + char」表達式是否創建另一個std :: string?
- 21. 重定向std :: cout
- 22. std :: cout和std :: wcout有什麼區別?
- 23. setbase(8)和std :: cout << std :: oct
- 24. 如何在gdb中打印std :: map值
- 25. std :: string :: append(std :: string)錯誤的輸出
- 26. 將std :: __ cxx11 :: string轉換爲std :: string
- 27. std :: sort on std :: vector <std::string>
- 28. boost :: interprocess - std :: string與std :: vector
- 29. 將字符打印爲std :: cout的數字
- 30. C++力的std :: COUT平齊(打印到屏幕)
它在'':http://en.cppreference.com/w/cpp/string/basic_string/operator_ltltgtgt –
...這是有道理的,因爲這是你可能會把一個插入覆蓋自定義班級*你*正在設計;在它的頭文件中。基本類型和流緩衝區與'basic_ostream'耦合,但是,它們應該是。 – WhozCraig