使用C++,是否有一個等效的標準庫常量'\t'
就像換行符一樣?標準庫中是否存在標準std :: endl的等價物?
理想:
std::stringstream ss;
ss << std::tab << "text";
如果不是,爲什麼是這樣的情況?
(我知道我可以插入一個'\t'
,但我想說我的好奇心)。
使用C++,是否有一個等效的標準庫常量'\t'
就像換行符一樣?標準庫中是否存在標準std :: endl的等價物?
理想:
std::stringstream ss;
ss << std::tab << "text";
如果不是,爲什麼是這樣的情況?
(我知道我可以插入一個'\t'
,但我想說我的好奇心)。
第std::endl
不是一個換行常數。這是一個操縱器其中,另外來插入一個換行符,還有轉儲這個流。
如果只是要添加一個換行符,你應該只需插入'\n'
。如果你只是想添加一個標籤,你只需插入一個'\t'
。沒有std::tab
或任何東西,因爲插入一個標籤加上衝刷流不是一個普通的操作。
號
只有std::ends
(插入空字符)和std::flush
(刷新流)輸出操縱器除了在ostream的std::endl
包括文件。
您可以在ios和iomanip包含文件中找到其他人。全部清單是here
實際上,這是不需要的。
由於endl
首先執行插入換行符\n
的同樣工作,然後也刷新緩衝區。在流上插入\t
不需要刷新後。
如果要自己添加的功能,它應該是這樣的:
#include <iostream>
namespace std {
template <typename _CharT, typename _Traits>
inline basic_ostream<_CharT, _Traits> &
tab(basic_ostream<_CharT, _Traits> &__os) {
return __os.put(__os.widen('\t'));
}
}
int main() {
std::cout << "hello" << std::endl;
std::cout << std::tab << "world" << std::endl;
}
我不建議這樣做,但我想補充的完整性的解決方案。
@Ksletmo,'endl'插入的序列總是''\ n'';它與該平臺的首選文本文件行結尾無關。 –
換句話說:換行符「\ n」是一個標準的ASCII字符,就像''\ t''一樣。將單個字符「\ n」寫入以文本模式打開的文件的效果因平臺而異。正如Rob所說,這與'std :: endl'沒有關係,它只是寫入一個字符並進行刷新。它不知道或不在乎流與該角色有什麼關係。 –