std:: operator+ (std::basic_string)
Defined in header
<string>
|
||
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(1) | (constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(2) | (constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(3) | (constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
constexpr
std::
basic_string
<
CharT,Traits,Alloc
>
|
(4) | (since C++26) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(5) | (constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(6) | (constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
constexpr
std::
basic_string
<
CharT,Traits,Alloc
>
|
(7) | (since C++26) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(8) |
(since C++11)
(constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(9) |
(since C++11)
(constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(10) |
(since C++11)
(constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(11) |
(since C++11)
(constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
constexpr
std::
basic_string
<
CharT,Traits,Alloc
>
|
(12) | (since C++26) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(13) |
(since C++11)
(constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(14) |
(since C++11)
(constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
std::
basic_string
<
CharT,Traits,Alloc
>
|
(15) |
(since C++11)
(constexpr since C++20) |
template
<
class
CharT,
class
Traits,
class
Alloc
>
constexpr
std::
basic_string
<
CharT,Traits,Alloc
>
|
(16) | (since C++26) |
Returns a string containing characters from lhs followed by the characters from rhs . Equivalent to:
The allocator used for the result is:
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
(
)
In other words:
In each case, the left operand is preferred when both are
For
(
8-16
)
, all rvalue
|
(since C++11) |
Parameters
lhs | - | string , string view (since C++26) , character, or pointer to the first character in a null-terminated array |
rhs | - | string , string view (since C++26) , character, or pointer to the first character in a null-terminated array |
Return value
A string containing characters from lhs followed by the characters from rhs , using the allocator determined as above (since C++11) .
Notes
Because the allocator used by the result of
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() + /* ... */; // uses select_on_container_copy_construction on meow's allocator woof + dog() + /* ... */; // uses allocator of dog()'s return value instead meow + woof + meow; // uses select_on_container_copy_construction on meow's allocator meow + (woof + meow); // uses SOCCC on woof's allocator instead
For a chain of
// use my_favorite_allocator for the final result my_string(my_favorite_allocator) + meow + woof + cat() + dog();
For better and portable control over allocators, member functions like
|
(since C++11) |
The usage of
std::
type_identity_t
as parameter in overloads
(
4
)
,
(
7
)
,
(
12
)
, and
(
16
)
ensures that an object of type
std::
basic_string
<
CharT, Traits, Allocator
>
can always be concatenated to an object of a type
|
(since C++26) |
Example
#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 }
Output:
Hello world! Hello Waterworld!
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
P1165R1 | C++11 | allocator propagation is haphazard and inconsistent | made more consistent |
See also
appends characters to the end
(public member function) |
|
appends characters to the end
(public member function) |
|
inserts characters
(public member function) |