C++0xでは、min()とmax()は可変引数であるが、以下のように書かなければならない。
int a = max({1,2,3,4,5,6,7,8,9,10}) ;
何故ならば、min()/max()は、initializer_listを使うからである。
こうなった理由というのも、ベンチマークをとったら、initializer_list版の方が、早かったかららしい。
私は、そのベンチマーク結果に疑問を持っていた。Variadic Templateの遅くなる理由が見あたらない。実装の問題では無かろうかと。
どうも、そんな動きがあるようだ。詳しくは、またペーパーがでるものと思われる。
これはベンチマークを取るよりもコンパイラが吐いたコードを
ReplyDelete比較した方がいいですよね・・・・
コンパイラの実装上の問題に過ぎないと思うのですが・・・