在C++中使全局"常量"的正确方法

Mar*_*rkD 7 c++ variables

通常,我定义一个真正的全局常量(比方说,pi)的方法是在头文件中放置一个extern const,并在.cpp文件中定义常量:

constants.h:

extern const pi;
Run Code Online (Sandbox Code Playgroud)

constants.cpp:

#include "constants.h"
#include <cmath>
const pi=std::acos(-1.0);
Run Code Online (Sandbox Code Playgroud)

这适用于像pi这样的真常量.但是,我正在寻找一个最佳实践来定义一个"常量",因为它将从程序运行到程序运行保持不变,但可能会根据输入文件而改变.这方面的一个例子是引力常数,它取决于所用的单位.g在输入文件中定义,我希望它是任何对象都可以使用的全局值.我总是听说使用非常量全局变量是不好的做法,因此目前我已将其存储在系统对象中,然后将其传递给它生成的所有对象.然而,随着对象数量的增长,这似乎有点笨拙且难以维护.

思考?

Pav*_*aev 4

这完全取决于您的应用程序大小。如果您确实绝对确定某个特定常量将具有由代码中的所有线程和分支在一次运行中共享的单个值,并且将来不太可能改变,那么全局变量最接近地匹配预期语义,所以最好只使用它。如果需要的话,稍后重构也是微不足道的,特别是如果您为全局变量使用独特的前缀(例如g_),这样它们就不会与本地变量发生冲突 - 这通常是一个好主意。

总的来说,我更喜欢坚持 YAGNI,而不是试图盲目地安抚各种编码风格指南。相反,我首先查看他们的基本原理是否适用于特定情况(如果编码风格指南没有基本原理,那么它就是一个糟糕的指南),如果显然不适用,那么就没有理由应用该指南对于那种情况。

  • 为什么不将其放在单独的命名空间中而不是“g_”前缀中呢? (8认同)