operator<< (std::basic_ostream)
|
Défini dans l'en-tête
<ostream>
|
||
|
basic_ostream et caractères
|
||
| (1) | ||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
basic_ostream et tableau de caractères
|
||
| (2) | ||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
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
|
||
| (4) | (depuis C++20) | |
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
Insère un caractère ou une chaîne de caractères.
- 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.
-
Pour les premier et troisième surcharges (où
CharTcorrespond 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.
- Si le nombre de caractères à insérer est inférieur à os. width ( ) , alors suffisamment 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.
Ostream
est un type de classe dérivé publiquement et sans ambiguïté de
std::ios_base
.
Table des matières |
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>
)
|