◐ Shell
clean mode source ↗

std::basic_string<CharT,Traits,Allocator>::operator= - cppreference.com

提供: cppreference.com

<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>

(1)

basic_string& operator=( const basic_string& str );

(C++20未満)

constexpr basic_string& operator=( const basic_string& str );

(C++20以上)
(2)

basic_string& operator=( basic_string&& str );

(C++11以上)
(C++17未満)

basic_string& operator=( basic_string&& str ) noexcept(/* see below */);

(C++17以上)
(C++20未満)

constexpr basic_string& operator=( basic_string&& str ) noexcept(/* see below */);

(C++20以上)
(3)

basic_string& operator=( const CharT* s );

(C++20未満)

constexpr basic_string& operator=( const CharT* s );

(C++20以上)
(4)

basic_string& operator=( CharT ch );

(C++20未満)

constexpr basic_string& operator=( CharT ch );

(C++20以上)
(5)

basic_string& operator=( std::initializer_list<CharT> ilist );

(C++11以上)
(C++20未満)

constexpr basic_string& operator=( std::initializer_list<CharT> ilist );

(C++20以上)
(6)

template<class T> basic_string& operator=( const T& t );

(C++17以上)
(C++20未満)

template<class T> constexpr basic_string& operator=( const T& t );

(C++20以上)

文字列の内容を置き換えます。

1) 内容を str のコピーを置き換えます。 *thisstr が同じオブジェクトの場合、この関数は効果を持ちません。

2) ムーブセマンティクスを用いて、内容を str の内容で置き換えます。 以後 str は有効だけれども未規定な状態になります。 std::allocator_traits<Allocator>::propagate_on_container_move_assignment()true の場合、ターゲットのアロケータはソースのアロケータのコピーで置き換えられます。 false かつソースとターゲットのアロケータを比較して等しくない場合、ターゲットはソースのメモリの所有権を取ることができず、必要に応じて自身のアロケータを使用して追加のメモリを確保し、個々の文字を個別に代入しなければなりません。 他のコンテナのムーブ代入と異なり、 str を指す参照、ポインタ、イテレータは無効化されることがあります。

3) assign(s, Traits::length(s)) によって行われたかのように、内容を s の指すヌル終端文字列の内容で置き換えます。

4) assign(std::addressof(ch), 1) によって行われたかのように、内容を文字 ch で置き換えます。

5) assign(ilist.begin(), ilist.size()) によって行われたかのように、内容を初期化子リスト ilist の内容で置き換えます。

6) std::basic_string_view<CharT, Traits> sv = t; によって行われたかのように、 t を文字列ビュー sv に暗黙に変換し、 assign(sv) によって行われたかのように、内容を sv の内容で置き換えます。 このオーバーロードは、std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>>true であり、 std::is_convertible_v<const T&, const CharT*>false である場合にのみ、オーバーロード解決に参加します。

引数

ch - 文字列を初期化するための値
str - 文字列を初期化するためのソースとして使用される文字列
s - 文字列を初期化するためのソースとして使用されるヌル終端文字列を指すポインタ
ilist - 文字列を初期化するための std::initializer_list
t - 文字列を初期化するための std::basic_string_view に変換可能なオブジェクト

戻り値

*this

計算量

1) str のサイズに比例。

2) this のサイズに比例 (形式上、各々の CharT が破棄される必要があります)。 アロケータが等しくなく、伝播しない場合、 str のサイズにも比例 (コピーが行われなければなりません)。

3) s のサイズに比例。

4) 一定。

5) ilist のサイズに比例。

例外

2)

noexcept

指定:  

noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value || std::allocator_traits<Allocator>::is_always_equal::value)

(C++17以上)

操作の結果 size() > max_size() となる場合は、 std::length_error が投げられます。

何らかの理由で例外が投げられた場合は、この関数は効果を持ちません (強い例外保証)。

(C++11以上)

欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2063 C++11 non-normative note stated that swap is a valid implementation of move assignment corrected to support allocators
LWG 2946 C++17 string_view overload causes ambiguity in some cases avoided by making it a template

関連項目