デフォルト パラメーターとして浮動小数点値を使用してジェネリック クラス テンプレートをインスタンス化しようとすると、コンパイラがエラーを発行します。整数値は期待どおりに機能しますが、浮動小数点は機能しません。
C 11 標準 (14.3.2/1) によると、非型のテンプレート引数は、 -type テンプレート パラメータは特定のルールに従う必要があります。制限の 1 つは、浮動小数点値を使用できないことです。代わりに、それらは整数型または列挙型、テンプレート パラメーター型の変換された定数式、またはその他の特定の構成要素である必要があります。
この制限は、おそらく浮動小数点計算の不正確な性質。浮動小数点値を正確に表現することは常に実現可能であるとは限らず、不正確さが発生して予期しない動作が発生する可能性があります。次の例を考えてみましょう。
func<1/3.f>(); func<2/6.f>();
同じ関数を 2 回呼び出すことが意図されていますが、1/3 と 2/6 の浮動小数点表現は、丸め誤差の可能性があるため、同一であるとは保証されません。これにより、意図しない関数呼び出しが発生する可能性があります。
目的がテンプレート引数として何らかの方法で浮動小数点値を表すことである場合、1 つのオプションは C 11 定数式 (constexpr) を利用することです。 。これらを使用すると、コンパイル時に浮動小数点値の分子と分母を計算でき、それらを個別の整数引数として渡すことができます。
ただし、浮動小数点値がそれぞれの値に近づくように、しきい値を定義することが重要です。他のものは同じ分子/分母のペアを共有します。それ以外の場合、浮動小数点値を非型テンプレート引数として制限する背後にある理論的根拠は引き続き有効です。
以上が浮動小数点値を C テンプレート パラメータとして使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。