std::basic_string<CharT,Traits,Allocator>::swap
From cppreference.com
< cpp | string | basic string
void swap( basic_string& other ); |
(C++17まで) | |
| void swap( basic_string& other ) noexcept(/* 下記参照 */); |
(C++17以降) (C++20 以降 constexpr) |
|
文字列の内容をotherの内容と交換します。すべてのイテレータおよび参照は無効になる可能性があります。
|
もし std::allocator_traits<Allocator>:: |
(C++11以降) |
目次 |
[編集] パラメータ
| その他 | - | 内容を交換する文字列 |
[編集] 計算量
定数。
[編集] 例外
|
例外はスローされません。 |
(C++11まで) |
|
例外はスローされません。ただし、動作が未定義である場合を除きます。 何らかの理由で例外がスローされた場合、この関数は効果がありません(強力な例外安全保証)。 |
(C++11以降) |
|
noexcept 指定:
noexcept(std::allocator_traits<Allocator>::propagate_on_container_swap::value || std::allocator_traits<Allocator>::is_always_equal::value) |
(C++17以降) |
[編集] 例
このコードを実行
#include <iostream> #include <string> int main() { std::string a = "AAA"; std::string b = "BBBB"; std::cout << "Before swap:\n" "a = " << a << "\n" "b = " << b << "\n\n"; a.swap(b); std::cout << "After swap:\n" "a = " << a << "\n" "b = " << b << '\n'; }
出力
Before swap: a = AAA b = BBBB After swap: a = BBBB b = AAA
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 403 | C++98 | swap()は例外をスローする可能性がある |
例外はスローされない |
| LWG 535 | C++98 | 文字列の交換で文字の順序が保持されない | 順序も保持される |
| LWG 2151 (P1148R0) |
C++11 | ケースでは例外がスローされなかった 異なる非伝播アロケータの場合 |
この場合の動作は 未定義となる |
[編集] 関連項目
| 2つのオブジェクトの値を交換する (関数テンプレート) | |
| 2つの要素の範囲を交換する (関数テンプレート) | |
| 内容を交換する ( std::basic_string_view<CharT,Traits> の public メンバ関数) |