std::basic_string<CharT,Traits,Allocator>:: operator=
From ja.cppreference.net
<
cpp
|
string
|
basic string
|
basic_string
&
operator
=
(
const
basic_string
&
str
)
;
|
(1) | (C++20以降 constexpr) |
|
basic_string
&
operator
=
(
basic_string
&&
str
)
noexcept ( /* 下記参照 */ ) ; |
(2) |
(C++11以降)
(C++20以降 constexpr) |
|
basic_string
&
operator
=
(
const
CharT
*
s
)
;
|
(3) | (C++20以降 constexpr) |
|
basic_string
&
operator
=
(
CharT ch
)
;
|
(4) | (C++20以降 constexpr) |
|
basic_string
&
operator
=
(
std::
initializer_list
<
CharT
>
ilist
)
;
|
(5) |
(C++11以降)
(C++20以降 constexpr) |
|
template
<
class
StringViewLike
>
basic_string & operator = ( const StringViewLike & t ) ; |
(6) |
(C++17以降)
(C++20以降 constexpr) |
|
basic_string
&
operator
=
(
std::
nullptr_t
)
=
delete
;
|
(7) | (C++23以降) |
文字列の内容を置き換えます。
1)
内容を
str
のコピーで置き換えます。
*
this
と
str
が同じオブジェクトである場合、この関数は何も行いません。
他のシーケンスコンテナのムーブ代入とは異なり、
str
の要素への参照、ポインタ、およびイテレータは無効化される可能性があります。
3)
内容を
s
が指すnull終端文字列の内容で置き換える。これは
assign
(
s, Traits
::
length
(
s
)
)
を呼び出した場合と同様である。
5)
初期化子リストの内容で置き換えます
ilist
によって、あたかも
assign
(
ilist.
begin
(
)
, ilist.
size
(
)
)
のように。
6)
暗黙的に
t
を文字列ビュー
sv
に変換し(
std::
basic_string_view
<
CharT, Traits
>
sv
=
t
;
による変換と同様)、その後
assign
(
sv
)
によって内容を
sv
の内容で置き換えます。
このオーバーロードは、以下の条件が満たされる場合にのみオーバーロード解決に参加します:
std::
is_convertible_v
<
const
StringViewLike
&
,
std:: basic_string_view < CharT, Traits >> が true であり、かつ std:: is_convertible_v < const StringViewLike & , const CharT * > が false である場合です。
std:: basic_string_view < CharT, Traits >> が true であり、かつ std:: is_convertible_v < const StringViewLike & , const CharT * > が false である場合です。
7)
std::basic_string
は
nullptr
から代入できません。
目次 |
パラメータ
| ch | - | 文字列の文字を初期化する値 |
| str | - | 文字列の初期化に使用するソース文字列 |
| s | - | 文字列の初期化に使用するヌル終端文字列へのポインタ |
| ilist | - | std::initializer_list 文字列の初期化に使用する |
| t | - | std::basic_string_view に変換可能なオブジェクト(文字列の初期化に使用) |
戻り値
* this
計算量
1)
サイズに対して線形
str
.
2)
*
this
のサイズに対して線形(形式的には、各
CharT
が破棄される必要がある)。アロケータが等しくなく伝播しない場合、
str
のサイズに対しても線形(コピーが作成される必要がある)。
3)
サイズ
s
に対して線形。
4)
定数。
5)
ilist
のサイズに対して線形。
6)
サイズが
t
に対して線形。
例外
2)
noexcept
specification:
noexcept
(
std::
allocator_traits
<
Allocator
>
::
propagate_on_container_move_assignment
::
value
||
操作によって
size()
が
max_size()
を超える場合、
std::length_error
をスローします。
何らかの理由で例外がスローされた場合、この関数は何も効果を持ちません( strong exception safety guarantee )。
例
このコードを実行
#include <iomanip> #include <iostream> #include <string> int main() { std::string str1; std::string str2{"alpha"}; // (1) operator=(const basic_string&); str1 = str2; std::cout << std::quoted(str1) << ' ' // "alpha" << std::quoted(str2) << '\n'; // "alpha" // (2) operator=(basic_string&&); str1 = std::move(str2); std::cout << std::quoted(str1) << ' ' // "alpha" << std::quoted(str2) << '\n'; // "" or "alpha" (unspecified) // (3) operator=(const CharT*); str1 = "beta"; std::cout << std::quoted(str1) << '\n'; // "beta" // (4) operator=(CharT); str1 = '!'; std::cout << std::quoted(str1) << '\n'; // "!" // (5) operator=(std::initializer_list<CharT>); str1 = {'g', 'a', 'm', 'm', 'a'}; std::cout << std::quoted(str1) << '\n'; // "gamma" // (6) operator=(const T&); str1 = 35U; // equivalent to str1 = static_cast<char>(35U); std::cout << std::quoted(str1) << '\n'; // "#" (ASCII = 35) }
出力例:
"alpha" "alpha" "alpha" "" "beta" "!" "gamma" "#"
不具合報告
以下の動作変更に関する欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 847 | C++98 | 例外安全性保証が存在しなかった | 強い例外安全性保証を追加 |
| LWG 2063 | C++11 |
ムーブ代入演算子が
SequenceContainer の意味要件に従っていなかった |
要件に従うように修正 |
| LWG 2946 | C++17 | オーバーロード ( 6 ) が一部の場合に曖昧性を生じた | テンプレート化することで回避 |
関連項目
basic_stringを構築する
(公開メンバ関数) |
|
|
文字列に文字を割り当てる
(公開メンバ関数) |
|
|
ビューを割り当てる
( std::basic_string_view<CharT,Traits>の公開メンバ関数)
|