std::basic_string<CharT,Traits,Allocator>::resize_and_overwrite
来自cppreference.com
< cpp | string | basic string
template< class Operation > constexpr void resize_and_overwrite( size_type count, Operation op ); |
(C++23 起) | |
重设字符串大小以含有至多 count
个字符,用用户提供的操作 op
修改可能不确定的内容并设置长度。
此函数执行下列步骤:
- 获得至少含有 count + 1 个字符的存储,并使其前
k
个字符等于 *this 的前k
个字符,其中k
是count
与调用resize_and_overwrite
前 this->size() 的结果的较小者。令p
代表指向该存储中首个字符的指针。- 相等性以如同通过检查 this->compare(0, k, p, k) == 0 确定。
-
[p + k, p + count]
中的字符可能拥有不确定值。
- 求值 std::move(op)(p, count) 。令
r
为 std::move(op)(p, count) 的返回值。 - 以
[p, p + r)
替换 *this 的内容(这会设置 *this 的长度为r
)。非法化所有指向范围[p, p + count]
中的指针与引用。
若 r
不具有整数式类型则程序非良构。若 std::move(op)(p, count) 抛出异常或修改 p
或 count
、 r
不在范围 [0, count]
中,或范围 [p, p + r)
中的任何字符拥有不确定值,则行为未定义。
推荐实现避免不必要的复制与分配,例如通过使得 p
等于指向调用后为 *this 分配的字符存储的起始指针,若 count
小于或等于 this->capacity() 则该存储能等同于 *this 的既存存储。
参数
count | - | 字符串的最大可能的新大小 |
op | - | 用于设置字符串新内容的函数对象 |
返回值
(无)
异常
若 count > max_size() 则为 std::length_error 。任何对应的 Allocator
所抛的异常。
若从 std::move(op)(p, count) 抛出异常,则行为未定义。否则若抛出异常则此函数无效果。
注解
无论重分配是否出现, resize_and_overwrite
都非法化所有指向 *this 中的迭代器、指针及引用。实现可以假设调用 resize_and_overwrite
后字符串的内容不会被别名化。
示例
本节未完成 原因:暂无示例 |
参阅
更改存储的字符数 (公开成员函数) | |
(C++14)(C++20) |
创建管理一个新对象的独占指针 (函数模板) |
创建管理一个新对象的共享指针 (函数模板) | |
创建管理一个用分配器分配的新对象的共享指针 (函数模板) |