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

mat*_*dev 40 c++ std

使用C++,是否存在与'\t'换行符相同的标准库常量?

理想的情况是:

std::stringstream ss;
ss << std::tab << "text";
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*ian 69

std::endl是不是换行不变.它是一个操纵器,除了插入换行符之外,还会刷新流.

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

  • @Ksletmo,`endl`插入的序列总是''\n'`; 它与平台首选的文本文件行结尾无关. (4认同)
  • 换句话说:换行符''\n'`是一个标准的ASCII字符,就像''\ t'`一样.将单个字符''\n'`写入以文本模式打开的文件的效果因平台而异.正如Rob所说,这与`std :: endl`无关,它只是写一个字符并进行刷新.它不知道或不关心流对该角色的影响. (3认同)

Tre*_*key 14

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

#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;
}
Run Code Online (Sandbox Code Playgroud)

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