Visual Studio 2015中定义无穷数触发C2124错误,求解决办法
解决VS2015中定义无穷数触发C2124错误的方法
哈哈,这个问题我之前在VS2015里也踩过坑!编译器对常量表达式里的除以零卡得特别死,哪怕你是故意要搞无穷大也不行。给你几个简单的解决办法,挑适合你的用:
1. 用标准库的numeric_limits(最规范的跨平台方案)
C++11及以后的标准里已经提供了专门的无穷大表示,直接用标准库的方法就好,完全符合规范还跨平台。记得要包含<limits>头文件:
#include <limits> // 定义成const变量,类型明确 const double INF = std::numeric_limits<double>::infinity(); // 或者如果你还是想用宏的话 #define INF std::numeric_limits<double>::infinity()
这个方法语义清晰,不管是哪个编译器都能识别,没有兼容性问题。
2. 用十六进制浮点数直接定义编译期常量
如果你需要INF是一个编译期常量(比如用来初始化constexpr变量),可以直接用十六进制浮点数表示double的正无穷——因为double的正无穷对应指数值超过最大允许范围,我们可以写成:
#define INF 0x1.0p1024
这个值在编译时会被直接解析为正无穷,不会触发除以零错误,而且是编译期常量,适合需要constexpr的场景。
3. 运行时赋值(最简单的快速方案)
如果你的代码不需要INF是编译期常量,只是普通的运行时变量,那直接在运行时赋值就行——编译器不会管运行时的除以零(只要你的系统支持IEEE754浮点数标准,现在几乎所有系统都支持):
double INF = 1.0 / 0.0;
这个写法最直观,和你原本的思路最接近,只是把编译期的常量表达式改成了运行时赋值,避开了编译器的常量表达式检查。
内容的提问来源于stack exchange,提问作者銇忋倞銈勩伨 銇裤倝銇�,c++11;visual-studio-2015;computer-science"
相关产品推荐
相关产品推荐

