2017-11-21 3 views
0

関数は、ベクトルを取る持つとの差が、空にデフォルト設定は何ではありません:オプションを後押しする不履行ブーストを取る1対ベクトルとブーストの違い::任意<vector>を関数のパラメータとして使用し、デフォルト値を空に設定してブーストする:なし?

void foo (const vector<T> & vec = {}) 

::どれ

void bar (boost::optional<const vector<T>&> vec = boost::none) 

ランタイムの観点とメモリ効率?

+0

あなたは別のものを使用して離れていくことはできません、彼らは単に異なることを意味する –

答えて

0

optional<vector>vectorための1つに比べて、2つの空の状態を有する:それはないベクターを含まないか、またはそれが空であるベクターを含むことができます。効率の問題を脇に置いて、どのタイプがあなたの意図を実際に反映しているかを検討してください。

通常、オブジェクトが含まれているかどうかを示すために余分なバイトが必要なため、optionalはわずかに多くのメモリを使用します。また、そのフラグを設定して確認するのにはわずかなコストがかかります。ただし、アプリケーションにとって重要なパフォーマンスの差が生じるという証拠がない限り、これを優先して優先させる理由はありません。

関連する問題