2011-11-29 9 views
6

私はwin32プログラム@ windows 7マシンで "boost :: call_traits :: param_type"というコードを使用しています。私の驚いたことに、それは "ダブル"ではなく "const double &"です。なぜboost :: call_traits <double> :: param_typeは "double"ではなく "const double"です

私はすべてのプリミティブ型が関数のパラメータに "値渡し"を使うのが良いと思いましたが、これは常識ではありませんか?多くの人が参照を使用するかどうかを判断するためにis_podを使用するため、そうではありませんか?

答えて

-1

boost::call_traitsクラステンプレートはdoubleに特化されていません。プライマリクラステンプレートはconst T &を返します。その理由はdoubleではなくconst double &ですが、この場合はそれほど重要ではありませんが、Tが巨大なデータメンバーを持つクラスであれば問題ありません。不必要なコピーを避けるために、const参照です。

4

この最適化は、「doc」に従って、「小さな」組み込みタイプにのみ適用されます。

sourceを簡単に見てみると、「小さい」タイプはsizeof(T) <= sizeof(void *)を満たすタイプと考えられます。 32ビットマシンでは、明らかにdoubleは含まれていません。

いくつかのケースでは、うまくdoubleではなくdouble const&ようにパラメータを渡すために、より良いかもしれないが、いつものように、あなたはベンチマークおよびテストする必要があると思います...

関連する問題