C++14標準ライブラリの小さな変更 その4

cpprefjpのSEO関係の対応をしてたり、cpprefjpの数式をMathJaxに対応してたり、Boost 1.58.0のリリースノート翻訳をやっていたりしたので、こちらが滞っていました。

その1その2その3に引き続き、C++14の標準ライブラリに入った小さな変更を紹介していきます。

atomic_flag::clearの要件追加

std::atomic_flagクラスのclear()メンバ関数に渡すメモリオーダーに、「memory_order_consumeを指定してはならない」という要件が追加されました。

orderが以下のメモリオーダーではないこと:

・memory_order_consume (C++14)
・memory_order_acquire
・memory_order_acq_rel

deque::resizeとvector::resizeの内部的な挙動変更

C++11まで、std::deque::resize()の挙動は、以下のようなものでした:

if (sz > size())
  insert(end(), sz - size(), c);
else if (sz < size())
  erase(begin() + sz, end());

C++14からは、以下のようになりました:

・もしszが現在のコンテナのsize()より小さい場合、pop_back()関数をsize() - sz回呼ぶ
・もしszが現在のコンテナのsize()より大きい場合、sz -size()個だけオブジェクトcのコピーを追加する。

要件も少し緩くなっています。

この変更は、std::vector::resize()に対しても行われています。

deque::shrink_to_fitに要件と計算量の規定を追加

C++11から追加されたstd::deque::shrink_to_fit()メンバ関数に、以下の要件:

型Tが*thisに対してムーブ挿入可能であること

および、計算量の規定が追加されました。

最大で、要素数に対して線形時間

vector::reserveに要件を追加

dequeshrink_to_fit()と同様の要件が、std::vector::reserve()に追加されました。

型Tが*thisに対してムーブ挿入可能であること

vector::shrink_to_fitに要件と計算量の規定、例外が送出された際の挙動を追加

dequeshrink_to_fit()で追加された要件と計算量の規定に加え、vector::shrink_to_fit()に、例外が送出された際の挙動が追加されました。

非コピー挿入可能な型Tのムーブコンストラクタが例外を送出した場合、
この関数は何もしない。

今日はこれまで

まだまだ続きます。