operator<<(std::basic_ostream)
| 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.
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.- Si
os.width() > 1, alorsos.width() - 1copies deos.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.
os.width(0) est appelé pour annuler les effets de std::setw, le cas échéant.s.
- Pour la première et la troisième surcharge (où
CharTcorrespond au type dech), exactementtraits::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.
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 deos.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.
os.width(0) est appelé pour annuler les effets de std::setw, le cas échéant.s est un pointeur nul, le comportement est indéfini.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.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
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
où
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) |
|
|
(C++23)
|
affiche une représentation
formatée
des arguments
(fonction template) |
|
élargit les caractères
(fonction membre publique de
std::basic_ios<CharT,Traits>
)
|