名前空間
変種
操作

std::basic_string<CharT,Traits,Allocator>::swap

From cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::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>::
    propagate_on_container_swap::value &&
get_allocator() == s.get_allocator()
false なら、動作は未定義です。

(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 メンバ関数) [編集]
English 日本語 中文(简体) 中文(繁體)