在c ++中声明INFINITY的正确方法是什么?

时间:2016-01-31 09:35:35

标签: c++

const int INFINITY = INT_MAX;

给了我

  

期望标识符

错误。你能告诉我我错过了什么吗?我试图加入<cmath>,但没有帮助。

2 个答案:

答案 0 :(得分:7)

问题在于INFINITYmacro from the <cmath>标题还是您自己的(但之后您会知道它)。

宏在编译之前由预处理器扩展,在本例中为实现定义的值。例如:

const int 0x7f800000 = 0x7fffffff;

0x7f800000是IEEE 754单精度正无穷大的十六进制表示 0x7fffffffINT_MAX

0x7f800000不是有效标识符,因此语法无效。快速解决方法是为您的int指定一个不同的名称,以使其不被实现保留(不是标准宏的名称),例如:

const int infinity = INT_MAX;

代码将编译。但是,当谈到问题的标题时:

  

在c ++中声明INFINITY的正确方法是什么?

参考this Q&A建议这个等效的C ++标准库:

#include <limits>

const int infinity = std::numeric_limits<int>::max();

请注意,整数没有保留无穷大(Inf)或不是数字(NaN)以及导致值超出{{ 1}}的范围将(仍然)溢出,而不是使用IEEE浮点数的操作,根据this Q&A,不会溢出并导致int < / p>

答案 1 :(得分:-1)

INT_MAX是C方式。 您应该在C ++中使用以下内容: -

#include <limits>

int infinity = std::numeric_limits<int>::max();