Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: basic_string

From cppreference.net
std::basic_string
(1)
basic_string ( ) : basic_string ( Allocator ( ) ) { }
(depuis C++11)
(jusqu'à C++17)
basic_string ( ) noexcept ( noexcept ( Allocator ( ) ) )
: basic_string ( Allocator ( ) ) { }
(depuis C++17)
(constexpr depuis C++20)
(2)
explicit basic_string ( const Allocator & alloc = Allocator ( ) ) ;
(jusqu'à C++11)
explicit basic_string ( const Allocator & alloc ) ;
(noexcept depuis C++17)
(constexpr depuis C++20)
basic_string ( size_type count, CharT ch,
const Allocator & alloc = Allocator ( ) ) ;
(3) (constexpr depuis C++20)
template < class InputIt >

basic_string ( InputIt first, InputIt last,

const Allocator & alloc = Allocator ( ) ) ;
(4) (constexpr depuis C++20)
template < container-compatible-range < CharT > R >

constexpr basic_string ( std:: from_range_t , R && rg,

const Allocator & = Allocator ( ) ) ;
(5) (depuis C++23)
basic_string ( const CharT * s, size_type count,
const Allocator & alloc = Allocator ( ) ) ;
(6) (constexpr depuis C++20)
basic_string ( const CharT * s, const Allocator & alloc = Allocator ( ) ) ;
(7) (constexpr depuis C++20)
basic_string ( std:: nullptr_t ) = delete ;
(8) (depuis C++23)
template < class StringViewLike >

explicit basic_string ( const StringViewLike & t,

const Allocator & alloc = Allocator ( ) ) ;
(9) (depuis C++17)
(constexpr depuis C++20)
template < class StringViewLike >

basic_string ( const StringViewLike & t,
size_type pos, size_type count,

const Allocator & alloc = Allocator ( ) ) ;
(10) (depuis C++17)
basic_string ( const basic_string & other ) ;
(11) (constexpr depuis C++20)
basic_string ( basic_string && other ) noexcept ;
(12) (depuis C++11)
(constexpr depuis C++20)
basic_string ( const basic_string & other, const Allocator & alloc ) ;
(13) (depuis C++11)
(constexpr depuis C++20)
basic_string ( basic_string && other, const Allocator & alloc ) ;
(14) (depuis C++11)
(constexpr depuis C++20)
basic_string ( const basic_string & other, size_type pos,
const Allocator & alloc = Allocator ( ) ) ;
(15) (constexpr depuis C++20)
constexpr basic_string ( basic_string && other, size_type pos,
const Allocator & alloc = Allocator ( ) ) ;
(16) (depuis C++23)
basic_string ( const basic_string & other,

size_type pos, size_type count,

const Allocator & alloc = Allocator ( ) ) ;
(17) (constexpr depuis C++20)
constexpr basic_string ( basic_string && other,

size_type pos, size_type count,

const Allocator & alloc = Allocator ( ) ) ;
(18) (depuis C++23)
basic_string ( std:: initializer_list < CharT > ilist,
const Allocator & alloc = Allocator ( ) ) ;
(19) (depuis C++11)
(constexpr depuis C++20)

Construit une nouvelle chaîne à partir de diverses sources de données et optionnellement en utilisant l'allocateur fourni par l'utilisateur alloc .

1) Le constructeur par défaut depuis C++11. Construit une chaîne vide avec un allocateur construit par défaut.
Si Allocator n'est pas DefaultConstructible , le comportement est indéfini.
2) Le constructeur par défaut jusqu'à C++11. Construit une chaîne vide avec l'allocateur donné alloc .
3) Construit une chaîne avec count copies du caractère ch .

Si CharT n'est pas CopyInsertable dans std:: basic_string < CharT > , le comportement est indéfini.

(depuis C++11)

Cette surcharge participe à la résolution de surcharge seulement si Allocator satisfait aux exigences de Allocator .

(depuis C++17)
4) Construit une chaîne avec le contenu de la plage [ first , last ) . Chaque itérateur dans [ first , last ) est déréférencé exactement une fois.

Si InputIt ne satisfait pas aux exigences de LegacyInputIterator , la surcharge (3) est appelée à la place avec les arguments static_cast < size_type > ( first ) , last et alloc .

(jusqu'à C++11)

Cette surcharge participe à la résolution de surcharge seulement si InputIt satisfait aux exigences de LegacyInputIterator .

Si CharT n'est pas EmplaceConstructible dans std:: basic_string < CharT > à partir de * first , le comportement est indéfini.

(depuis C++11)
5) Construit une chaîne avec le contenu de la plage rg . Chaque itérateur dans rg est déréférencé exactement une fois.
Si CharT n'est pas EmplaceConstructible dans std:: basic_string < CharT > à partir de * ranges:: begin ( rg ) , le comportement est indéfini.
6) Construit une chaîne avec le contenu de la plage [ s , s + count ) .
Si [ s , s + count ) n'est pas une plage valide, le comportement est indéfini.
7) Équivalent à basic_string ( s, Traits :: length ( s ) , alloc ) .

Cette surcharge participe à la résolution de surcharge seulement si Allocator satisfait aux exigences de Allocator .

(depuis C++17)
8) std::basic_string ne peut pas être construit à partir de nullptr .
9) Convertit implicitement t en une vue de chaîne sv comme si par std:: basic_string_view < CharT, Traits > sv = t ; , puis construit une chaîne comme si par basic_string ( sv. data ( ) , sv. size ( ) , alloc ) .
Cette surcharge participe à la résolution de surcharge seulement si std:: is_convertible_v < const StringViewLike & ,
std:: basic_string_view < CharT, Traits >>
est true et std:: is_convertible_v < const StringViewLike & , const CharT * > est false .
10) Convertit implicitement t en une vue de chaîne sv comme si par std:: basic_string_view < CharT, Traits > sv = t ; , puis construit une chaîne comme si par basic_string ( sv. substr ( pos, n ) , alloc ) .
Cette surcharge participe à la résolution de surcharge seulement si std:: is_convertible_v < const StringViewLike & ,
std:: basic_string_view < CharT, Traits >>
est true .
11-18) Construit une chaîne avec (une partie) du contenu de other . Si le type de other est basic_string&& , lorsque la construction est terminée, other se trouve dans un état valide mais non spécifié.
11) Le constructeur de copie.

L'allocateur est obtenu comme si en appelant std:: allocator_traits < Allocator > ::
select_on_container_copy_construction
( other. get_allocator ( ) )
.

(depuis C++11)
12) Le constructeur de déplacement. L'allocateur est obtenu par construction par déplacement depuis other. get_allocator ( ) .
13) Identique au constructeur de copie, sauf que alloc est utilisé comme allocateur.
Si CharT n'est pas CopyInsertable dans std:: basic_string < CharT > , le comportement est indéfini.
14) Identique au constructeur de déplacement, sauf que alloc est utilisé comme allocateur.
Si CharT n'est pas MoveInsertable dans std:: basic_string < CharT > , le comportement est indéfini.
15,16) Construit une chaîne avec le contenu de la plage [ other. data ( ) + pos , other. data ( ) + other. size ( ) ) .
17,18) Construit une chaîne avec le contenu de la plage [ other. data ( ) + pos , other. data ( ) + ( pos + std:: min ( count, other. size ( ) - pos ) ) ) .
19) Équivalent à basic_string ( ilist. begin ( ) , ilist. end ( ) ) .

Table des matières

Paramètres

alloc - allocateur à utiliser pour toutes les allocations mémoire de cette chaîne
count - taille de la chaîne résultante
ch - valeur pour initialiser la chaîne
pos - position du premier caractère à inclure
first, last - plage depuis laquelle copier les caractères
s - pointeur vers un tableau de caractères à utiliser comme source pour initialiser la chaîne
other - autre chaîne à utiliser comme source pour initialiser la chaîne
ilist - std::initializer_list pour initialiser la chaîne
t - objet (convertible en std::basic_string_view ) pour initialiser la chaîne
rg - une plage compatible avec les conteneurs

Complexité

1,2) Constant.
3-7) Linéaire par rapport à la taille de la chaîne.
9-11) Linéaire par rapport à la taille de la chaîne.
12) Constante.
13) Linéaire par rapport à la taille de la chaîne.
14) Linéaire dans la taille de la chaîne si alloc ! = other. get_allocator ( ) est true , sinon constant.
15-19) Linéaire par rapport à la taille de la chaîne.

Exceptions

10) std::out_of_range si pos est hors limites.
14) Ne lance rien si alloc == str. get_allocator ( ) est true .
15-18) std::out_of_range si pos > other. size ( ) est true .

Lance std::length_error si la longueur de la chaîne construite dépasse max_size() (par exemple, si count > max_size ( ) pour (3) ). Les appels à Allocator::allocate peuvent lancer des exceptions.

Si une exception est levée pour quelque raison que ce soit, ces fonctions n'ont aucun effet ( strong exception safety guarantee ).

Notes

Initialisation avec un littéral de chaîne qui contient des caractères ' \0 ' intégrés utilise la surcharge (7) , qui s'arrête au premier caractère nul. Ceci peut être évité en spécifiant un constructeur différent ou en utilisant operator""s :

std::string s1 = "ab\0\0cd";   // s1 contient "ab"
std::string s2{"ab\0\0cd", 6}; // s2 contient "ab\0\0cd"
std::string s3 = "ab\0\0cd"s;  // s3 contient "ab\0\0cd"
Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_containers_ranges 202202L (C++23) Constructeur étiqueté (5) pour construire à partir d'un intervalle compatible avec le conteneur

Exemple

#include <cassert>
#include <cctype>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    std::cout << "1)  string(); ";
    std::string s1;
    assert(s1.empty() && (s1.length() == 0) && (s1.size() == 0));
    std::cout << "s1.capacity(): " << s1.capacity() << '\n'; // non spécifié
    std::cout << "3)  string(size_type count, CharT ch): ";
    std::string s2(4, '=');
    std::cout << std::quoted(s2) << '\n'; // "===="
    std::cout << "4)  string(InputIt first, InputIt last): ";
    char mutable_c_str[] = "another C-style string";
    std::string s4(std::begin(mutable_c_str) + 8, std::end(mutable_c_str) - 1);
    std::cout << std::quoted(s4) << '\n'; // "C-style string"
    std::cout << "6)  string(CharT const* s, size_type count): ";
    std::string s6("Chaîne de style C", 7);
    std::cout << std::quoted(s6) << '\n'; // Style C, c'est-à-dire [0, 7)
    std::cout << "7)  string(CharT const* s): ";
    std::string s7("Chaîne de style C\0");
    std::cout << std::quoted(s7) << '\n'; // "Style C"
    std::cout << "11) string(string&): ";
    std::string const other11("Exemplaire");
    std::string s11(other11);
    std::cout << std::quoted(s11) << '\n'; // "Exemplaire"
    std::cout << "12) string(string&&): ";
    std::string s12(std::string("C++ par ") + std::string("exemple"));
    std::cout << std::quoted(s12) << '\n'; // "C++ par l'exemple"
    std::cout << "15) string(const string& other, size_type pos): ";
    std::string const other15("Mutatis Mutandis");
    std::string s15(other15, 8);
    std::cout << std::quoted(s15) << '\n'; // "Mutandis", c'est-à-dire [8, 16)
    std::cout << "17) string(const string& other, size_type pos, size_type count): ";
    std::string const other17("Exemplaire");
    std::string s17(other17, 0, other17.length() - 1);
    std::cout << std::quoted(s17) << '\n'; // "Exemplaire"
    std::cout << "19) string(std::initializer_list<CharT>): ";
    std::string s19({'C', '-', 's', 't', 'y', 'l', 'e'});
    std::cout << std::quoted(s19) << '\n'; // "Style C"
}

Sortie possible :

1)  string(); s1.capacity(): 15
3)  string(size_type count, CharT ch): "===="
4)  string(InputIt first, InputIt last): "C-style string"
6)  string(CharT const* s, size_type count): "C-style"
7)  string(CharT const* s): "C-style"
11) string(string&): "Exemplar"
12) string(string&&): "C++ by example"
15) string(const string& other, size_type pos): "Mutandis"
17) string(const string& other, size_type pos, size_type count): "Exemplar"
19) string(std::initializer_list<CharT>): "C-style"

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 301 C++98 la surcharge (4) n'utilisait pas le paramètre
alloc si InputIt est un type entier
utilise ce paramètre
LWG 438 C++98 la surcharge (4) n'appelait la surcharge (3)
que si InputIt est un type entier
appelle la surcharge (3) si InputIt
n'est pas un LegacyInputIterator
LWG 847 C++98 aucune garantie de sûreté des exceptions garantie de sûreté forte des exceptions ajoutée
LWG 2193 C++11 le constructeur par défaut est explicite rendu non-explicite
LWG 2235 C++98 s pouvait être une valeur de pointeur nul le comportement est indéfini dans ce cas
LWG 2250 C++98 le comportement de la surcharge (17) était indéfini
si pos > other. size ( ) est true
lève toujours une
exception dans ce cas
LWG 2583 C++98 aucun moyen de fournir un allocateur pour la surcharge (17) surcharge (15) ajoutée
LWG 2946 C++17 la surcharge (9) provoque une ambiguïté dans certains cas évitée en la rendant template
LWG 3076 C++17 les surcharges (3,7) peuvent provoquer des ambiguïtés
dans la déduction d'arguments de template de classe
contraintes ajoutées
LWG 3111
( P1148R0 )
C++98 la résolution de LWG issue 2235 a rendu
le comportement de basic_string ( nullptr, 0 ) indéfini
le comportement est bien
défini dans ce cas [1]
  1. [ nullptr , nullptr + 0 ) constitue une plage vide valide, car l'ajout de zéro à une valeur de pointeur nul est également bien défini (le résultat reste une valeur de pointeur nul).

Voir aussi

assigner des caractères à une chaîne
(fonction membre publique)
assigne des valeurs à la chaîne
(fonction membre publique)
(C++11)
convertit une valeur entière ou à virgule flottante en string
(fonction)
(C++11)
convertit une valeur entière ou à virgule flottante en wstring
(fonction)
construit un basic_string_view
(fonction membre publique de std::basic_string_view<CharT,Traits> )