Namespaces
Variants

operator<<(std::basic_ostream)

De fr.cppreference.net
 
 
 
 
Défini dans l'en-tête <ostream>
basic_ostream et caractère
template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
    operator<<( basic_ostream<CharT, Traits>& os, CharT ch );

template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
    operator<<( basic_ostream<CharT, Traits>& os, char ch );

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, char ch );

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, signed char ch );

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, unsigned char ch );
(1)
basic_ostream et tableau de caractères
template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
    operator<<( basic_ostream<CharT, Traits>& os, const CharT* s );

template< class CharT, class Traits >
basic_ostream<CharT, Traits>&
    operator<<( basic_ostream<CharT, Traits>& os, const char* s );

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, const char* s );

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, const signed char* s );

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, const unsigned char* s );
(2)
basic_ostream rvalue
template< class Ostream, class T >
Ostream&& operator<<( Ostream&& os, const T& value );
(3) (depuis C++11)
Surcharges supprimées pour basic_ostream et caractère/tableau UTF
template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, wchar_t ch ) = delete;

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, char8_t ch ) = delete;

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, char16_t ch ) = delete;

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, char32_t ch ) = delete;

template< class Traits >
basic_ostream<wchar_t, Traits>&
    operator<<( basic_ostream<wchar_t, Traits>& os, char8_t ch ) = delete;

template< class Traits >
basic_ostream<wchar_t, Traits>&
    operator<<( basic_ostream<wchar_t, Traits>& os, char16_t ch ) = delete;

template< class Traits >
basic_ostream<wchar_t, Traits>&
    operator<<( basic_ostream<wchar_t, Traits>& os, char32_t ch ) = delete;

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, const wchar_t* s ) = delete;

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, const char8_t* s ) = delete;

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, const char16_t* s ) = delete;

template< class Traits >
basic_ostream<char, Traits>&
    operator<<( basic_ostream<char, Traits>& os, const char32_t* s ) = delete;

template< class Traits >
basic_ostream<wchar_t, Traits>&
    operator<<( basic_ostream<wchar_t, Traits>& os, const char8_t* s ) = delete;

template< class Traits >
basic_ostream<wchar_t, Traits>&
    operator<<( basic_ostream<wchar_t, Traits>& os, const char16_t* s ) = delete;

template< class Traits >
basic_ostream<wchar_t, Traits>&
    operator<<( basic_ostream<wchar_t, Traits>& os, const char32_t* s ) = delete;
(4) (depuis C++20)

Insère un caractère ou une chaîne de caractères.

1) Se comporte comme un FormattedOutputFunction. Après avoir construit et vérifié l'objet sentry, insère le caractère ch. Si ch a le type char et le type de conteneur de caractères de os n'est pas char, os.widen(ch) sera inséré à la place.
Le rembourrage est déterminé comme suit :
  • Si os.width() > 1, alors os.width() - 1 copies de os.fill() sont ajoutées au caractère de sortie pour former la séquence de caractères de sortie.
  • Si (out.flags() & std::ios_base::adjustfield) == std::ios_base::left, les caractères de remplissage sont placés après le caractère de sortie, sinon avant.
Après l'insertion, os.width(0) est appelé pour annuler les effets de std::setw, le cas échéant.
2) Se comporte comme un FormattedOutputFunction. Après avoir construit et vérifié l'objet sentry, insère les caractères successifs du tableau de caractères dont le premier élément est pointé par s.
  • Pour la première et la troisième surcharge (où CharT correspond au type de ch), exactement traits::length(s) caractères sont insérés.
  • Pour la deuxième surcharge, exactement std::char_traits<char>::length(s) caractères sont insérés.
  • Pour les deux dernières surcharges, exactement traits::length(reinterpret_cast<const char*>(s)) sont insérés.
Avant l'insertion, d'abord, tous les caractères sont élargis en utilisant os.widen(), puis le rembourrage est déterminé comme suit :
  • Si le nombre de caractères à insérer est inférieur à os.width(), alors assez de copies de os.fill() sont ajoutées à la séquence de caractères pour que sa longueur soit égale à os.width().
  • Si (out.flags() & std::ios_base::adjustfield) == std::ios_base::left, les caractères de remplissage sont ajoutés à la fin de la séquence de sortie, sinon ils sont ajoutés avant la séquence de sortie.
Après l'insertion, os.width(0) est appelé pour annuler les effets de std::setw, le cas échéant.
Si s est un pointeur nul, le comportement est indéfini.
3) Appelle l'opérateur d'insertion approprié, étant donné une référence rvalue à un objet de flux de sortie (équivalent à os << value). Cette surcharge participe à la résolution de surcharge uniquement si l'expression os << value est bien formée et que Ostream est un type de classe dérivé publiquement et sans ambiguïté de std::ios_base.
4) Les surcharges qui acceptent char16_t, char32_t etc (ou leur séquence terminée par null) sont supprimées : std::cout << u'X' n'est pas autorisé. Auparavant, celles-ci auraient imprimé une valeur entière ou pointeur.

Paramètres

os - flux de sortie dans lequel insérer les données
ch - référence vers un caractère à insérer
s - pointeur vers une chaîne de caractères à insérer

Valeur de retour

1,2) os
3) std :: move ( os )

Notes

Avant le problème LWG 1203 , le code tel que ( std:: ostringstream ( ) << 1.2 ) . str ( ) ne compile pas.

Exemple

#include <fstream>
#include <iostream>
void foo()
{
    // error: operator<< (basic_ostream<char, _Traits>&, char8_t) is deleted
//  std::cout << u8'z' << '\n';
}
std::ostream& operator<<(std::ostream& os, char8_t const& ch)
{
    return os << static_cast<char>(ch);
}
int main()
{
    std::cout << "Hello, world" // uses `const char*` overload
              << '\n';          // uses `char` overload
    std::ofstream{"test.txt"} << 1.2; // uses rvalue overload
    std::cout << u8'!' << '\n'; // uses program-defined operator<<(os, char8_t const&)
}

Sortie :

Hello, world
!

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 167 C++98 le nombre de caractères insérés pour toutes
les surcharges dans (2) était traits :: length ( s )
mis à jour les nombres pour les surcharges
CharT ne correspond pas au type de ch
LWG 1203 C++11 la surcharge pour le flux rvalue retournait
une référence lvalue vers la classe de base
retourne une référence rvalue
vers la classe dérivée
LWG 2011 C++98 le remplissage était déterminé par std::num_put::do_put() déterminé par l'opérateur lui-même
LWG 2534 C++11 la surcharge pour le flux rvalue n'était pas contrainte contrainte

Voir aussi

insère des données formatées
(fonction membre publique)
affiche une représentation formatée des arguments
(fonction template)
élargit les caractères
(fonction membre publique de std::basic_ios<CharT,Traits> )