使用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'没有关系,它只是写入一个字符并进行刷新。它不知道或不在乎流与该角色有什么关系。 –