Is there a tab equivalent of std::endl within the standard library?
Solution 1:
No. std::endl
isn't a newline constant. It's a manipulator which, in addition to inserting a newline, also flushes the stream.
If you just want to add a newline, you're supposed to just insert a '\n'
. And if you just want to add a tab, you just insert a '\t'
. There's no std::tab
or anything because inserting a tab plus flushing the stream is not exactly a common operation.
Solution 2:
If you want to add the feature yourself, it would look like this:
#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;
}
I don't recommend doing this, but I wanted to add a solution for completeness.
Solution 3:
Actually, it is not needed.
Because endl
first does the same job of inserting a newline as \n
, and then also flushes the buffer.
Inserting \t
on a stream does not require to flush it after .