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

Rac*_*ael 2 c++

const int INFINITY = INT_MAX;
Run Code Online (Sandbox Code Playgroud)

给了我

期望一个标识符

错误.你能告诉我我错过了什么吗?我试图包括<cmath>但它没有帮助.

Log*_*uff 7

问题是INFINITY要么是标题中的宏<cmath>还是你自己的宏(但是你会知道它).

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

const int 0x7f800000 = 0x7fffffff;
Run Code Online (Sandbox Code Playgroud)

0x7f800000是IEEE 754单精度正无穷大的十六进制表示.
0x7fffffff存在INT_MAX.

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

const int infinity = INT_MAX;
Run Code Online (Sandbox Code Playgroud)

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

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

请参阅此Q&A,建议此C++标准库等效:

#include <limits>

const int infinity = std::numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)

请注意,整数没有保留无穷大(Inf),或者没有数字(NaN),导致值超出int范围的操作将(仍然)溢出,而不是使用IEEE浮点数的操作,根据到这个Q&A,不溢出,并导致Inf.