为什么numeric_limits<T>::has_infinity
是一个const值而numeric_limits<T>::infinity
不是?为什么要使numeric_limits<T>::infinity
成为一个函数?
答案 0 :(得分:4)
因为float
,double
或UDT
静态const 等值无法在类中初始化并需要外部定义。简单来说,它们需要一个内存位置,而静态const积分值则不需要(只要没有指向它们的指针/引用)。
在 C ++ 11 中,这些函数应该被声明为constexpr
,这可以消除你可能看到的任何缺点,因为它们是函数而不是常量。