我读到使用最大双精度值的标准C++方法是std::numeric_limits<double>::max
。
初始化为我使用的最大双精度的每个函数中:
#include <limits>
#define MAX_DOUBLE (std::numeric_limits<double>::max)
使用 gcc -pedantic -pedantic-errors -wall -wextra -werror,我得到以下错误:
Cannot convert 'double (*)() noexcept' to 'double' in initialization
你能解释这个错误吗?
std::numeric_limits<double>::max
是全局命名空间中的函数,而不是常量。如果要创建宏,则需要将定义指定为函数标识符
#define MAX_DOUBLE std::numeric_limits<double>::max()
因此,将MAX_DOUBLE传递给错误消息指示的双精度标识符意味着使用函数指针初始化双精度,在这种情况下,其类型double (*)() noexcept
,这会导致类型不匹配。
最后,出于所有实际目的DBL_MAX
在限制中定义的应该服务于你的目的,因此你不会经历这种折磨。
正如错误消息所说,您直接使用函数指针(double (*)() noexcept
)作为double
。 std::numeric_limits<double>::max
声明为函数,则需要调用它以获取值。
您可以更改
#define MAX_DOUBLE (std::numeric_limits<double>::max)
自
#define MAX_DOUBLE (std::numeric_limits<double>::max())
您需要将其定义为:
#define MAX_DOUBLE std::numeric_limits<double>::max()