定义最大双精度时"无法在初始化时将'double (*)() noexcept'转换为'double'"



我读到使用最大双精度值的标准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)作为doublestd::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()

最新更新