const int INFINITY = INT_MAX;
给了我
期望标识符
错误。你能告诉我我错过了什么吗?我试图加入<cmath>
,但没有帮助。
答案 0 :(得分:7)
问题在于INFINITY
是macro from the <cmath>
标题还是您自己的(但之后您会知道它)。
宏在编译之前由预处理器扩展,在本例中为实现定义的值。例如:
const int 0x7f800000 = 0x7fffffff;
0x7f800000
是IEEE 754单精度正无穷大的十六进制表示
0x7fffffff
为INT_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();