当年我们写图形。
写物理。
写信号处理。
总有一个常量会出现。
pi。
当年:每个项目都有自己的 pi
你会看到这些写法。
constexpr double PI = 3.14159265358979323846;
或者。
#define PI 3.1415926
能用。
但它们都有点尴尬。
你要么写得很长。
要么精度不够。
更糟的是。
团队里可能出现两份 pi。
它们还不一样。
线上啪一下:你以为大家用同一个常量,其实不是
你写了个小项目。
一个模块算角度。
另一个模块算弧度。
你们各自定义了一份 pi。
精度不一样。
然后结果在边界条件处抖动。
你排查很久。
才发现是常量不一致。
C++20:std::numbers
C++20 把常用数学常量放进 <numbers>。
#include <numbers>
double x = std::numbers::pi;
你得到的 pi。
是标准库给的。
不会再每个项目各写各的。
还有别的常量
比如 e。
#include <numbers>
double y = std::numbers::e;
你不用背。
用到再查。
至少它们有了统一出处。
你刚学 C++ 会卡:这是不是宏
不是。
它是 constexpr 的变量模板风格的常量。
你可以把它当成。
“类型安全、命名空间内的常量”。
关键结论
数学常量统一。
是为了减少那些“大家以为一样,其实不一样”的小坑。
小结
std::numbers 不会改变你的算法。
但它会让你的代码少一份祖传常量。