operator<<,>>(std::basic_string)
De fr.cppreference.net
| Défini dans l'en-tête <string>
|
||
template< class CharT, class Traits, class Allocator >
std::basic_ostream<CharT, Traits>&
operator<<( std::basic_ostream<CharT, Traits>& os,
const std::basic_string<CharT, Traits, Allocator>& str );
|
(1) | |
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT, Traits>&
operator>>( std::basic_istream<CharT, Traits>& is,
std::basic_string<CharT, Traits, Allocator>& str );
|
(2) | |
1) Se comporte comme un FormattedOutputFunction. Après avoir construit et vérifié l'objet sentinelle, détermine le remplissage du format de sortie.
Puis, insère chaque caractère de la séquence résultante seq (le contenu de str plus le remplissage) dans le flux de sortie os comme par un appel à os.rdbuf()->sputn(seq, n), où n est std::max(os.width(), str.size())
Finalement, appelle os.width(0) pour annuler les effets de std::setw, s'il y a lieu.
|
Équivalent à |
(depuis C++17) |
2) Se comporte comme un FormattedInputFunction. Après avoir construit et vérifié l'objet sentinelle, qui peut sauter les espaces blancs de début, efface d'abord
str avec str.erase(), puis lit des caractères depuis is et les ajoute à str comme par str.append(1, c), jusqu'à ce que l'une des conditions suivantes devienne vraie :
Ncaractères sont lus, oùNestis.width()siis.width() > 0, sinonNeststr.max_size(),- la condition de fin de fichier se produit dans le flux
is, ou std::isspace(c, is.getloc())esttruepour le caractère suivantcdansis(ce caractère d'espacement reste dans le flux d'entrée).
Si aucun caractère n'est extrait alors std::ios::failbit est positionné sur is, ce qui peut déclencher std::ios_base::failure.
is.width(0) pour annuler les effets de std::setw, s'il y a lieu. Exceptions
1)
Peut lever
std::ios_base::failure
si une exception est levée pendant la sortie.
2)
Peut lever
std::ios_base::failure
si aucun caractère n'est extrait de
is
(par exemple, le flux est en fin de fichier, ou ne contient que des espaces), ou si une exception est levée pendant la saisie.
Paramètres
| os | - | un flux de sortie de caractères |
| is | - | un flux d'entrée de caractères |
| str | - | la chaîne à insérer ou extraire |
Valeur de retour
1)
os
2)
is
Exemple
Exécuter ce code
#include <iostream> #include <sstream> #include <string> int main() { std::string greeting = "Hello, whirled!"; std::istringstream iss(greeting); std::string hello_comma, whirled, word; iss >> hello_comma; iss >> whirled; std::cout << greeting << '\n' << hello_comma << '\n' << whirled << '\n'; // Reset the stream iss.clear(); iss.seekg(0); while (iss >> word) std::cout << '+' << word << '\n'; }
Sortie :
Hello, whirled! Hello, whirled! +Hello, +whirled!
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 | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 25 | C++98 | n était le plus petit entre os. width ( ) et str. size ( ) | n est le plus grand des deux |
| LWG 90 | C++98 |
std::
isspace
(
c, getloc
(
)
)
était utilisé pour vérifier
les espaces, mais
getloc
n'est pas déclaré dans
<string>
|
remplacé
getloc
(
)
par is. getloc ( ) |
| LWG 91 | C++98 |
operator>>
ne se comportait pas
comme une FormattedInputFunction |
se comporte comme une
FormattedInputFunction |
| LWG 211 | C++98 |
operator>>
ne positionnait pas
failbit
si aucun caractère n'était extrait
|
positionne
failbit
|
| LWG 435 | C++98 |
les caractères étaient insérés par
os.
rdbuf
(
)
-
>
sputn
(
str.
data
(
)
, n
)
,
et la résolution de LWG issue 25 rendait le comportement indéfini si os. width ( ) est plus grand que str. size ( ) |
détermine d'abord le remplissage
et insère la séquence de caractères complétée à la place |
| LWG 586 | C++98 |
operator<<
ne se comportait pas
comme une FormattedOutputFunction |
se comporte comme une
FormattedOutputFunction |
Voir aussi
|
(C++17)
|
effectue la sortie de flux sur les vues de chaîne
(modèle de fonction) |