标准库中是否有与std :: endl等效的选项卡?

时间:2014-02-27 01:08:55

标签: c++ std

使用C ++,是否有'\t'的等效标准库常量,就像换行符一样?

理想情况下:

std::stringstream ss;
ss << std::tab << "text";

如果没有,为什么会这样?

(我知道我可以插入一个'\t',但我想满足我的好奇心。)

4 个答案:

答案 0 :(得分:64)

没有。 std::endl不是新行常量。这是操纵器另外插入换行符,刷新流。

如果只是想要添加换行符,则应该只插入'\n'。如果您只想添加标签,只需插入'\t'即可。没有std::tab或任何东西,因为插入标签加上刷新流并不是一个常见的操作。

答案 1 :(得分:12)

如果您想自己添加该功能,它将如下所示:

#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;
}

我不建议这样做,但我想添加一个完整性的解决方案。

答案 2 :(得分:4)

实际上,不需要它。

因为endl首先执行将换行符插入\n的相同工作,然后还刷新缓冲区。

在流上插入\t不需要在之后刷新它。

答案 3 :(得分:3)

没有

ostream include文件中除了std::ends之外,只有std::flush(插入空字符)和std::endl(刷新流)输出操纵符。

您可以在ios和iomanip包含文件中找到其他人。完整列表为here