14

への呼び出しにかかるルックアップ時間について興味がstd::get<>ありstd::tuple<>ます。いくつかの簡単なグーグル検索 (通常、この情報が記載されているリファレンス ページを含む) では結果が得られませんでした。

私の最初の直感 (および恐怖) は、タプルの再帰構造 (可変個引数テンプレートとして実装されている場合) は、N ルックアップの順序を必要とすることにつながるということです (のようにget<3>(t)見える呼び出しt.rest().rest().first()。ここ...

繰り返しになりますが、コンパイラがこれを最適化して、N 回の呼び出しのオーバーヘッドなしで正しいオフセットを直接返すことができることを願っています。

基本的に私が欲しいもの:実行時に指定された保証はありますか? std::tupleこれは実装方法を制限しますか?

4

3 に答える 3

15

C++ 仕様は、関数の実行時のパフォーマンスを保証しませ。漸近的な要件を述べている場合でも、それは操作の相対的な数を保証するだけであり、それらの操作のパフォーマンスは保証しません。O(1) は速いという意味ではなく、O(n) は遅いという意味でもありません。

コンパイラ/オプティマイザ/標準ライブラリの実装を信頼するか、すべてを自分で書き直して、必要なパフォーマンスを得ることができます。std::get、ほとんどの合理的なコンパイラ (最適化がオンになっている) の下では、構造体から値に直接アクセスするのとほぼ同じように実行する必要があります。しかし、仕様はそれを必要としません。

于 2013-04-23T14:00:49.767 に答える