std::operator+(std::basic_string)
| Défini dans l'en-tête <string>
|
||
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( const std::basic_string<CharT,Traits,Alloc>& lhs,
const std::basic_string<CharT,Traits,Alloc>& rhs );
|
(1) | (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( const std::basic_string<CharT,Traits,Alloc>& lhs,
const CharT* rhs );
|
(2) | (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( const std::basic_string<CharT,Traits,Alloc>& lhs,
CharT rhs );
|
(3) | (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
constexpr std::basic_string<CharT,Traits,Alloc>
operator+( const std::basic_string<CharT,Traits,Alloc>& lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs );
|
(4) | (depuis C++26) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( const CharT* lhs,
const std::basic_string<CharT,Traits,Alloc>& rhs );
|
(5) | (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( CharT lhs,
const std::basic_string<CharT,Traits,Alloc>& rhs );
|
(6) | (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
constexpr std::basic_string<CharT,Traits,Alloc>
operator+( std::type_identity_t<std::basic_string_view<CharT,Traits>> lhs,
const std::basic_string<CharT,Traits,Alloc>& rhs );
|
(7) | (depuis C++26) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( std::basic_string<CharT,Traits,Alloc>&& lhs,
std::basic_string<CharT,Traits,Alloc>&& rhs );
|
(8) | (depuis C++11) (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( std::basic_string<CharT,Traits,Alloc>&& lhs,
const std::basic_string<CharT,Traits,Alloc>& rhs );
|
(9) | (depuis C++11) (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( std::basic_string<CharT,Traits,Alloc>&& lhs,
const CharT* rhs );
|
(10) | (depuis C++11) (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( std::basic_string<CharT,Traits,Alloc>&& lhs,
CharT rhs );
|
(11) | (depuis C++11) (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
constexpr std::basic_string<CharT,Traits,Alloc>
operator+( std::basic_string<CharT,Traits,Alloc>&& lhs,
std::type_identity_t<std::basic_string_view<CharT,Traits>> rhs );
|
(12) | (depuis C++26) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( const std::basic_string<CharT,Traits,Alloc>& lhs,
std::basic_string<CharT,Traits,Alloc>&& rhs );
|
(13) | (depuis C++11) (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( const CharT* lhs,
std::basic_string<CharT,Traits,Alloc>&& rhs );
|
(14) | (depuis C++11) (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
std::basic_string<CharT,Traits,Alloc>
operator+( CharT lhs,
std::basic_string<CharT,Traits,Alloc>&& rhs );
|
(15) | (depuis C++11) (constexpr depuis C++20) |
template< class CharT, class Traits, class Alloc >
constexpr std::basic_string<CharT,Traits,Alloc>
operator+( std::type_identity_t<std::basic_string_view<CharT,Traits>> lhs,
std::basic_string<CharT,Traits,Alloc>&& rhs );
|
(16) | (depuis C++26) |
Renvoie une chaîne contenant les caractères de lhs suivis des caractères de rhs. Équivalent à :
std::basic_string<CharT, Traits, Allocator> r = lhs; r.append(rhs); return r;std::basic_string<CharT, Traits, Allocator> r = lhs; r.push_back(rhs); return r;std::basic_string<CharT, Traits, Allocator> r = lhs; r.append(rhs); return r;std::basic_string<CharT, Traits, Allocator> r = rhs; r.insert(0, lhs); return r;std::basic_string<CharT, Traits, Allocator> r = rhs; r.insert(r.begin(), lhs); return r;std::basic_string<CharT, Traits, Allocator> r = rhs; r.insert(0, lhs); return r;lhs.append(rhs); return std::move(lhs); sauf que lhs et rhs sont tous deux laissés dans un état valide mais non spécifié. Si lhs et rhs ont des allocateurs égaux, l'implémentation peut déplacer l'un ou l'autre.lhs.append(rhs); return std::move(lhs);lhs.push_back(rhs); return std::move(lhs);lhs.append(rhs); return std::move(lhs);rhs.insert(0, lhs); return std::move(rhs);rhs.insert(rhs.begin(), lhs); return std::move(rhs);rhs.insert(0, lhs); return std::move(rhs);|
L'allocateur utilisé pour le résultat est : 1-4)
std::allocator_traits<Alloc>::select_on_container_copy_construction(lhs.get_allocator())5-7)
std::allocator_traits<Alloc>::select_on_container_copy_construction(rhs.get_allocator())8-12)
lhs.get_allocator()13-16)
rhs.get_allocator()Autrement dit :
Dans chaque cas, l'opérande gauche est préféré lorsque les deux sont des Pour (8-16), tous les opérandes |
(depuis C++11) |
Paramètres
| lhs | - | string , string view (depuis C++26) , caractère, ou pointeur vers le premier caractère d'un tableau terminé par null |
| rhs | - | string , string view (depuis C++26) , caractère, ou pointeur vers le premier caractère d'un tableau terminé par null |
Valeur de retour
Une chaîne contenant les caractères de lhs suivis des caractères de rhs , en utilisant l'allocateur déterminé comme ci-dessus (depuis C++11) .
Notes
Étant donné que l'allocateur utilisé par le résultat de
using my_string = std::basic_string<char, std::char_traits<char>, my_allocator<char>>; my_string cat(); const my_string& dog(); my_string meow = /* ... */, woof = /* ... */; meow + cat() + /* ... */; // utilise select_on_container_copy_construction sur l'allocateur de meow woof + dog() + /* ... */; // utilise l'allocateur de la valeur de retour de dog() à la place meow + woof + meow; // utilise select_on_container_copy_construction sur l'allocateur de meow meow + (woof + meow); // utilise SOCCC sur l'allocateur de woof à la place
Pour une chaîne d'appels de
// utilise my_favorite_allocator pour le résultat final my_string(my_favorite_allocator) + meow + woof + cat() + dog();
Pour un contrôle meilleur et portable des allocateurs, les fonctions membres comme
|
(depuis C++11) |
|
L'utilisation de
std::
type_identity_t
comme paramètre dans les surcharges
(
4
)
,
(
7
)
,
(
12
)
, et
(
16
)
garantit qu'un objet de type
std::
basic_string
<
CharT, Traits, Allocator
>
peut toujours être concaténé à un objet de type
|
(depuis C++26) |
Exemple
#include <iostream> #include <string> #include <string_view> int main() { std::string s1 = "Hello"; std::string s2 = "world"; const char* end = "!\n"; std::cout << s1 + ' ' + s2 + end; std::string_view water{" Water"}; #if __cpp_lib_string_view >= 202403 std::cout << s1 + water + s2 << end; // overload (4), then (1) #else std::cout << s1 + std::string(water) + s2 << end; // OK, but less efficient #endif }
Sortie :
Hello world! Hello Waterworld!
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 tel que publié | Comportement correct |
|---|---|---|---|
| P1165R1 | C++11 | la propagation de l'allocateur est erratique et incohérente | rendue plus cohérente |
Voir aussi
|
ajoute des caractères à la fin
(fonction membre publique) |
|
|
ajoute des caractères à la fin
(fonction membre publique) |
|
|
insère des caractères
(fonction membre publique) |