Is there a tab equivalent of std::endl within the standard library?

C++Std

C++ Problem Overview


Using C++, is there an equivalent standard library constant for '\t' like there is for a newline?

Ideally:

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

If not, why is this the case?

(I'm aware I can just insert a '\t' but I'd like to sate my curiosity).

C++ Solutions


Solution 1 - C++

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 - C++

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 - C++

No.

There are only std::ends (insert null character) and std::flush (flush the stream) output manipulators besides std::endl in ostream include file.

You can find others in ios and iomanip include files. Full list is here

Solution 4 - C++

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 .

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmatthewrdevView Question on Stackoverflow
Solution 1 - C++Brian BiView Answer on Stackoverflow
Solution 2 - C++Trevor HickeyView Answer on Stackoverflow
Solution 3 - C++Sly_TheKingView Answer on Stackoverflow
Solution 4 - C++Pranit KothariView Answer on Stackoverflow