两个有限范围变量与一个全局变量

-2 c++ data-structures

使用 C++,假设我需要两个函数的 pi (3.14) 值。关于我的程序的性能,哪个更好,将 pi 声明为全局变量并在我的两个函数中使用它,还是在函数内将其声明两次作为有限范围变量,当每个函数内存不足时该变量将消失?显然,对于这个例子来说,差异是微乎其微的,但是如果你将这种情况乘以 x100 对于一个更大的程序,也许它实际上很重要,这就是我问的原因。

\n

Cli*_*ord 5

答案是否定的。Pi 是常量而不是变量,在<numbers>C++20 中定义,或者通常由M_PIin <math.h>/定义(在VC++<cmath>中需要,但在 gnu 或 clang 中不需要)_USE_MATH_DEFINES

当然,您永远不应该拥有同一常量值的多个独立实例;但这不是性能问题,而是维护和一致性问题。您将有多个地方可以使其正确,并且在浮点值的情况下,只需对无理数(例如 pi)的不同定义使用不同数量的有效数字,可能会导致错误和差异。

对于如何定义任何常数的更普遍的问题,我建议将<numbers>其作为应该如何定义的示例。常量在名称空间std::numbers声明。constexpr

但情况仍然是,这两种方法都不会影响性能,但显然,由于已经描述的与性能无关的原因,相同的多个实例仍然是不明智的。 constexpr

在某些情况下,常量是许多密切相关的类的一部分,并且本身非常特殊(即不是通用的,例如 pi),您可以使常量成为static constexpr基类的成员,使用该常量的所有其他类都来自该基类。衍生的。

无论哪种方式,都应该遵守DRY原则,这排除了任何常量的多次声明。