在程序中使用非类型模板参数而不分配给局部变量时出现意外结果?

Unexpected result when non type template parameter is used in the program without assigning to local variable?

由于直接浮点比较有风险,我正在编写一个包装器 class 用于检查浮点数的关系运算。

#include<iostream>
#include  <cmath>

template<unsigned int round_off_digits=10>
class FloatRelationalOperators
{
   private:
      inline static double calcEpsilonValue()
      {         

         int localVar=round_off_digits;

         double withLocalVar=pow(10, (localVar  * -1 ));
         double WithoutLocalVar=pow(10, (round_off_digits  * -1 ));

         std::cout<<"withLocalVar: "<<withLocalVar<<" "<<"WithoutLocalVar :"<<WithoutLocalVar;

         return WithoutLocalVar;
      }

   public:

      inline static bool notequal(double a,double b)
      {
         double res=fabs(a-b);

         if( res <= calcEpsilonValue())
         {
            return true;
         }
         else
         {
            return false;
         }
         return false;
      }
};


int main()
{
   FloatRelationalOperators<>::notequal(10.1,10.0);
}

我正在尝试根据最大四舍五入数字计算 epsilon 值。

当我运行这个程序时,得到的结果如下,

withLocalVar: 1e-10 WithoutLocalVar :inf

为什么在函数中直接使用非类型模板参数时我的答案是错误的?

我做错了什么吗?

round_off_digits 是一个无符号值,你将它与 -1 相乘,得到一个相当大的无符号整数。如果你把它改成 int 就可以了

http://cpp.sh/8yflj