55* function[ meta id-type]
66
77``` cpp
8- void reserve (size_type res_arg = 0); // (1) C++03 (C++20で非推奨化)
8+ void reserve (size_type res_arg = 0); // (1)+(2) C++03
9+
10+ void reserve(); // (1) C++20で非推奨化, C++26で削除
911
1012constexpr void reserve(size_type res_arg); // (2) C++20
1113```
@@ -29,12 +31,14 @@ constexpr void reserve(size_type res_arg); // (2) C++20
2931
3032
3133## 備考
32- - C++03で`reserve`操作でのメモリの縮小ができたことは、以下の問題があった:
33- - パフォーマンスの罠となっていた。この関数に指定する引数の値を慎重に選ばなければ、予想外の動的な再確保によってパフォーマンスを低下させる原因となっていた
34- - 移植性の壁になっていた。メモリ縮小は実装に任せられたオプション機能であったため、環境による動作の違いがあった
35- - [`vector`](/reference/vector/vector.md)と`string`でのコードの汎用化がむずかしくなっていた。[`vector::reserve()`](/reference/vector/vector/reserve.md)はメモリ伸長のみをサポートしていたが、`string`側はメモリ縮小もサポートしていたため、引数の値を計算することが難しかった
36- - メモリ縮小のためには[`shrink_to_fit()`](shrink_to_fit.md)メンバ関数があるため、そちらと重複する機能をなくすこととした
37- - これらのことから、C++20では、メモリ縮小を許可しているように見えるデフォルト引数`0`を非推奨化し、メモリ縮小機能を効果から削除した
34+ C++03で`reserve`操作でのメモリの縮小ができたことは、以下の問題があった:
35+
36+ - パフォーマンスの罠となっていた。この関数に指定する引数の値を慎重に選ばなければ、予想外の動的な再確保によってパフォーマンスを低下させる原因となっていた
37+ - 移植性の壁になっていた。メモリ縮小は実装に任せられたオプション機能であったため、環境による動作の違いがあった
38+ - [`vector`](/reference/vector/vector.md)と`string`でのコードの汎用化がむずかしくなっていた。[`vector::reserve()`](/reference/vector/vector/reserve.md)はメモリ伸長のみをサポートしていたが、`string`側はメモリ縮小もサポートしていたため、引数の値を計算することが難しかった
39+ - メモリ縮小のためには[`shrink_to_fit()`](shrink_to_fit.md)メンバ関数があるため、そちらと重複する機能であった
40+
41+ これらのことから、C++20では、メモリ縮小を許可しているように見えるデフォルト引数`0`を非推奨化し、メモリ縮小機能を効果から削除した。
3842
3943
4044## 例
@@ -70,3 +74,4 @@ int main()
7074## 参照
7175- [ P0966R1 ` string::reserve ` Should Not Shrink] ( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0966r1.html )
7276- [ P0980R1 Making ` std::string ` constexpr] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0980r1.pdf )
77+ - [ P2870R3 Remove ` basic_string::reserve() ` From C++26] ( https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2870r3.pdf )
0 commit comments