Is er een tab-equivalent van std::endl in de standaardbibliotheek?

Is er bij gebruik van C++ een equivalente standaardbibliotheekconstante voor '\t'zoals voor een nieuwe regel?

Idealiter:

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

Zo niet, waarom is dit het geval?

(Ik weet dat ik gewoon een '\t'kan invoegen, maar ik wil graag mijn nieuwsgierigheid bevredigen).


Antwoord 1, autoriteit 100%

Nee. std::endlis geen nieuwe regelconstante. Het is een manipulatordie, naasthet invoegen van een nieuwe regel, ook de stream spoelt.

Als je alleeneen nieuwe regel wilt toevoegen, moet je gewoon een '\n'invoegen. En als u alleen een tabblad wilt toevoegen, voegt u gewoon een '\t'in. Er is geen std::tabof iets dergelijks, want het invoegen van een tabblad en het doorspoelen van de stream is niet bepaald een gebruikelijke handeling.


Antwoord 2, autoriteit 22%

Als u de functie zelf wilt toevoegen, ziet deze er als volgt uit:

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

Ik raad het niet aan om dit te doen, maar ik wilde voor de volledigheid een oplossing toevoegen.


Antwoord 3, autoriteit 5%

Eigenlijk is het niet nodig.

Omdat endleerst hetzelfde werk doet als het invoegen van een nieuwe regel als \n, en daarna ook de buffer leegmaakt.

Als u \tin een stream invoegt, hoeft u deze niet te wissen na .


Antwoord 4, autoriteit 4%

Nee.

Er zijn alleen std::ends(voeg null-teken in) en std::flush(flush de stream) uitvoermanipulatoren naast std::endlin ostream include-bestand.

Je kunt anderen vinden in ios en iomanip include-bestanden. De volledige lijst is hier

Other episodes