Подтвердить что ты не робот

Есть ли эквивалент табуляции std:: endl в стандартной библиотеке?

С помощью С++ существует ли эквивалентная стандартная константа библиотеки для '\t', например, для новой строки?

В идеале:

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

Если нет, почему это так?

(Я знаю, что могу просто вставить '\t', но я хотел бы передать свое любопытство).

4b9b3361

Ответ 1

Нет. std::endl не является константой новой строки. Это манипулятор, который, помимо вставки новой строки, также очищает поток.

Если вы просто хотите добавить новую строку, вы должны просто вставить '\n'. И если вы просто хотите добавить вкладку, просто вставьте '\t'. Там нет std::tab или что-то еще, потому что вставка вкладки плюс очистка потока - не совсем обычная операция.

Ответ 2

Если вы хотите добавить эту функцию самостоятельно, она будет выглядеть так:

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

Я не рекомендую это делать, но я хотел бы добавить решение для полноты.

Ответ 3

Нет.

В файле ostream include есть только теги std::ends (insert null character) и std::flush (flush the stream), кроме std::endl.

Вы можете найти других в файлах ios и iomanip. Полный список здесь

Ответ 4

На самом деле это не нужно.

Поскольку endl сначала выполняет ту же работу, что и вставка строки новой строки как \n, а затем также очищает буфер.

Вставка \t в поток не требует его очистки после.