std::basic_string::operator=
提供: cppreference.com
< cpp | string | basic string
basic_string& operator=( const basic_string& str ); |
(1) | |
basic_string& operator=( basic_string&& str ) noexcept(/* see below */); |
(2) | (C++11およびそれ以降) |
basic_string& operator=( const CharT* s ); |
(3) | |
basic_string& operator=( CharT ch ); |
(4) | |
basic_string& operator=( std::initializer_list<CharT> ilist ); |
(5) | (C++11およびそれ以降) |
template<class T> basic_string& operator=( const T& t ); |
(6) | (C++17およびそれ以降) |
文字列の内容を置き換えます。
1) 内容を
str
のコピーを置き換えます。 *this
と str
が同じオブジェクトの場合、この関数は効果を持ちません。
2) ムーブセマンティクスを用いて、内容を str の内容で置き換えます。 str は有効だけれども未規定な状態になります。 *this と str が同じオブジェクトの場合、関数は効果を持ちません。
|
(C++17以前) |
2) ムーブセマンティクスを用いて、内容を str の内容で置き換えます。 以後 str は有効だけれども未規定な状態になります。 std::allocator_traits<Allocator>::propagate_on_container_move_assignment() が true の場合、ターゲットのアロケータはソースのアロケータのコピーで置き換えられます。 false かつソースとターゲットのアロケータを比較して等しくない場合、ターゲットはソースのメモリの所有権を取ることができず、必要に応じて自身のアロケータを使用して追加のメモリを確保し、個々の文字を個別に代入しなければなりません。 他のコンテナのムーブ代入と異なり、 str を指す参照、ポインタ、イテレータは無効化されることがあります。 |
(C++17およびそれ以降) |
3) *this = basic_string(s) によって行われたかのように、内容を
s
の指すNULL終端文字列の内容で置き換えます。 Traits::length(s) の呼び出しを伴います。4) *this = basic_string(1,c) によって行われたかのように、内容を文字
ch
で置き換えます。5) *this = basic_string(ilist) によって行われたかのように、内容を初期化子リスト
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 | - | 文字列を初期化するためのソースとして使用されるNULL終端文字列を指すポインタ |
init | - | 文字列を初期化するための std::initializer_list |
t | - | 文字列を初期化するための std::basic_string_view に変換可能なオブジェクト |
[編集] 戻り値
*this。
[編集] 計算量
1)
str
のサイズに比例。2)
this
のサイズに比例 (形式上、各々の CharT が破棄される必要があります)。 アロケータが等しくなく、伝播しない場合、 str
のサイズにも比例 (コピーが行われなければなりません)。3)
s
のサイズに比例。4) 一定。
5)
init
のサイズに比例。[編集] 例外
2) noexcept 指定:
noexcept |
(C++11およびそれ以降) (C++17以前) |
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 |
[編集] 例
This section is incomplete Reason: no example |
[編集] 関連項目
basic_string を構築します (パブリックメンバ関数) | |
文字列に文字を代入します (パブリックメンバ関数) |