参照 x と値 y を受け取り、y が x より大きい場合は x を y に代入する汎用関数を作成したいと考えています。(パフォーマンスが重要)
ここに私が持っているものがあります:
template<class X, class Y>
inline void chmax(X& x, const Y& y) { if (y > x) x = y; }
これが最善の方法ですか?
パラメータの型「const Y&」が気になるのですが、単に「Y」にすると何が違うのでしょうか? 2 つの異なる方法のいずれかがオプティマイザーを台無しにするでしょうか? Y が POD タイプの場合はどうでしょうか。これにより、addressof を呼び出し、ポインターを int に渡し、ポインターを逆参照するように強制されますか?
(2つが異なる場合、一般的なC++の回答とC++ 11固有の回答の両方に興味があります。)