c++11 - c++标准有关于处在moved状态的容器的说明吗?
黄舟
黄舟 2017-04-17 14:51:13
0
2
568
std::string a = "xxx";
std::string b = std::move(a);
//这时候的a,处于什么状态呢
a = "bbbbb";//合法吗?

因为我实际用下来好像有点问题。所以我就想知道,在标准中,是怎么描述这个问题的。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(2)
PHPzhong

C++11 21.4.3.17:
basic_string(basic_string&& str, const Allocator& alloc);
str は値が指定されていない有効な状態のままです。
理由は、 a は実際には左辺値であり、右辺値に変換されているため、b は a の data() バッファを指します。現時点では、a は未定義の状態にあり、a の値に再度アクセスすることは安全ではありません。
ただし、a = "bbbbb" は合法です。
これは代入演算子をオーバーロードするためです。
basic_string<charT,traits,Allocator>&operator=(const charT* s);

*this = Basic_string<charT,traits,Allocator&gt を返します;(s)
これは、新しい一時オブジェクトの Basic_string rvalue を構築することと同じです。 「bbbbb」の値がコピーされます。これは、新しく割り当てられたバッファを指すことを意味するため、問題はありません。

いいねを押す +0
黄舟

結局のところ、string は文字列です。gcc の組み込みの string を参照してください。 を使用した実装 operator = (&&)
swap
によって実装された標準は、move が不確実な状態にあることを意味します
stl code> は、moveempty 状態になるようにするためのものですが、stringstl

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート