2017-12-12 10 views
-4

boolを参照渡しする価値はありますか?参照によってconst boolを渡す+

void foo(const bool iflag); 

void foo(const bool& iflag); 

私は、ブール参照を聞いたブール値の宣言よりもはるかに時間がかかりますが、私はそれをチェックすることができませんでした。

+5

これは心配する価値のある問題になるでしょうか? –

+1

[GCCのための生成されたアセンブリ](https://godbolt.org/g/8Txx6q)の例です。 1つは明白により安価なアクセスになるだろう。 – StoryTeller

+1

_ "確認できませんでした。"何を試しましたか?テストを書いたり、単に生成されたコードをチェックすることはできませんか? –

答えて

1

呼び出し元サイトで暗黙的な変換を無効にしたい場合を除き、私は常に値を渡します。この場合、const参照が賢明な選択になる可能性があります。

パフォーマンスについては、疑問がある場合は、生成されたアセンブリを確認してください。本能は、コンパイラが混乱を最適化するかもしれないが、参照の場合に潜在的なオーバーヘッドを私に示唆します。

興味深いことに、C++標準では、boolのサイズは必須ではありませんが、それはは意図的に敵対的なコンパイラで絶対に巨大である可能性があります。さらに、標準では参照のサイズを調べるメカニズムは提供されていません。sizeof(T&)は常にsizeof(T)です。

+0

という違いが見える場合にのみ重要です。同じ時間C++標準で参照用のサイズを指定する必要はありません。 – user463035818

+0

@ tobi303:それより悪いことに、標準はTへの参照のサイズがsizeof(T)であるため、チェックする方法はありません。 – Bathsheba

+1

参照はスペースを取る必要もなく(実装に依存する)、sizeof(ref)は抽象的なものです。 –

関連する問題