std::operator+(std::basic_string)
在头文件 <string> 中定义 |
||
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(1) | (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(2) | (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(3) | (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > constexpr std::basic_string<CharT,Traits,Alloc> |
(4) | (从 C++26 开始) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(5) | (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(6) | (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > constexpr std::basic_string<CharT,Traits,Alloc> |
(7) | (从 C++26 开始) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(8) | (从 C++11 开始) (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(9) | (从 C++11 开始) (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(10) | (从 C++11 开始) (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(11) | (从 C++11 开始) (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > constexpr std::basic_string<CharT,Traits,Alloc> |
(12) | (从 C++26 开始) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(13) | (从 C++11 开始) (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(14) | (从 C++11 开始) (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > std::basic_string<CharT,Traits,Alloc> |
(15) | (从 C++11 开始) (从 C++20 开始为 constexpr) |
template< class CharT, class Traits, class Alloc > constexpr std::basic_string<CharT,Traits,Alloc> |
(16) | (从 C++26 开始) |
返回一个字符串,其中包含来自 lhs 的字符,后面跟着来自 rhs 的字符。等效于
使用的分配器是 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()
换句话说
在每种情况下,当两个操作数都是相同值类别的 对于 (8-16),所有右值 |
(从 C++11 开始) |
内容 |
[编辑] 参数
lhs | - | 字符串,字符串视图(自 C++26 起),字符或指向空终止数组中第一个字符的指针 |
rhs | - | 字符串,字符串视图(自 C++26 起),字符或指向空终止数组中第一个字符的指针 |
[编辑] 返回值
包含来自 lhs 的字符,后跟来自 rhs 的字符的字符串,使用上面确定的分配器(自 C++11 起)。
备注当涉及有状态分配器时(例如,当使用 std::pmr::string 时)(自 C++17 起),应谨慎使用 由于 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 对于 // use my_favorite_allocator for the final result my_string(my_favorite_allocator) + meow + woof + cat() + dog(); 为了更好地控制分配器并具有可移植性,应在使用所需分配器构建的结果字符串上使用 |
(从 C++11 开始) |
在过载 (4)、(7)、(12) 和 (16) 中使用 std::type_identity_t 作为参数可确保类型为 std::basic_string<CharT, Traits, Allocator> 的对象始终可以与类型为
|
(从 C++26 开始) |
[编辑] 示例
#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 }
输出
Hello world! Hello Waterworld!
[编辑] 缺陷报告
以下行为更改缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确行为 |
---|---|---|---|
P1165R1 | C++11 | 分配器传播是混乱且不一致的 | 更一致 |
[编辑] 参见
将字符追加到末尾 (公共成员函数) | |
将字符追加到末尾 (公共成员函数) | |
插入字符 (公共成员函数) |