Есть ли эквивалент табуляции std:: endl в стандартной библиотеке?
С помощью С++ существует ли эквивалентная стандартная константа библиотеки для '\t'
, например, для новой строки?
В идеале:
std::stringstream ss;
ss << std::tab << "text";
Если нет, почему это так?
(Я знаю, что могу просто вставить '\t'
, но я хотел бы передать свое любопытство).
Ответы
Ответ 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
в поток не требует его очистки после.