私が遭遇したこの例を理解していません:
int Multiply(int x, int m){ return x * m;} template<int m> int MultiplyBy(int x){ return x * m;} int a,b; a = Multiply(10,8); b = MultiplyBy<8>(10);
上記の例では、コンパイラは、シフト操作を使用して 2 のべき乗で乗算できることを認識しているため、テンプレート関数は単純な関数よりも高速です。x*8 は、より高速な x << に置き換えられます。単純な関数の場合、コンパイラは m の値を認識しないため、関数をインライン化できない限り最適化を実行できません。
私が理解しているように、テンプレートが最適化できる理由は、コンパイラがコンパイル時に引数 (8) の値を認識しているのに対し、単純な関数は実行時まで x (または m) の値を認識していないためです。では、単純な関数をインライン化すると、この事実がどのように変わるのでしょうか? インライン化は、引数値の実行時の知識を提供しませんか??