2016-08-03 4 views
0

タイプの要素で?C++ 11 <strong>デフォルトコンストラクタ</strong>、<strong>コピーコンストラクタ</strong>と内蔵を格納<code>std::array</code>よう<strong>集約</strong>タイプのために相互に比較</strong><strong>移動コンストラクタの速度をどのように集計&コンストラクタ速度比較

直感的には、私はmove> default> copy(速いほうが速い)と言うでしょう。

これは間違いありませんか?ビルトイン(等floatintなど)を保持std::array

+0

'array'に格納されている要素のタイプによって異なります。 move = default = copy、またはmove = copy> defaultまたは任意の組み合わせです。 – user975989

+0

あなたは正しいです。私は実際に組み込み型について考えていました。私は私の質問でそれを修正しています。 – Corvinus

+0

Well move =組み込みのためのコピーなので、copy/moveはmemcpyの同等物と同じであり、デフォルトはmemset相当(おそらくSIMDなど)です。決して私は嘘をついていません。デフォルトはmemsetではなく、初期化されていません。 – user975989

答えて

1

デフォルトコンストラクタは移動コピー(等価的に速いであろう)、続いて、最速であろう。

std::arrayは集合体なので、のデフォルトのコンストラクタは何も行いません。デフォルトの初期化は、これらのことから、内蔵インが移動し、で、コピーするので、全く同じ性能が賢明であることを非クラスTのための不確定値で

お知らせを生じる可能性があることcppreference

ノートに述べたようにあなたはそれをコピーするよりも速くビルトインを移動することはできません。 std::arrayためだから、

、順序はデフォルト>移動 == コピーです。

これは、非組み込み関数を保持する集計では必ずしも成立しませんが、組み込み関数または組み込み関数のみを保持するその他の集計を保持する集計では保持されます。

関連する問題