在定义max double时,'无法在初始化'中将'double(*)()noexcept'转换为'double'

时间:2015-04-23 09:14:55

标签: c++

我读到使用最大双精度值的标准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

你能解释一下这个错误吗?

3 个答案:

答案 0 :(得分:3)

正如错误消息所述,您直接使用函数指针(double (*)() noexcept)作为doublestd::numeric_limits<double>::max被声明为函数,您需要调用它来获取值。

您可以更改

#define MAX_DOUBLE (std::numeric_limits<double>::max)

#define MAX_DOUBLE (std::numeric_limits<double>::max())

答案 1 :(得分:2)

您需要将其定义为:

#define MAX_DOUBLE std::numeric_limits<double>::max()

答案 2 :(得分:0)

std::numeric_limits<double>::max是全局命名空间中的函数,而不是常量。如果要创建宏,则需要将定义指定为函数标识符

#define MAX_DOUBLE std::numeric_limits<double>::max()

因此,将错误消息指示的MAX_DOUBLE传递给双标识符意味着,使用函数指针初始化double,在这种情况下,其类型为double (*)() noexcept,导致类型不匹配。

最后,出于实际目的,climits中定义的DBL_MAX应该符合您的目的,因此您不会经历这种折磨。