const int INFINITY = INT_MAX;
Run Code Online (Sandbox Code Playgroud)
给了我
期望一个标识符
错误.你能告诉我我错过了什么吗?我试图包括<cmath>但它没有帮助.
问题是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.