在标题或实现文件中定义常数的优点

Merits of defining constants in header or implementation files

本文关键字:常数 定义 标题 实现 文件      更新时间:2023-10-16

在我正在工作的C 代码库中,声明常数的模式看起来像这样。

// module_constants.h
#ifndef MODULE_CONSTANTS
#define MODULE_CONSTANTS
namespace module {
extern const int SOME_CONST;
}
#endif
// module_constants.cpp
#include "module_constants.h"
namespace module {
const int SOME_CONST = 1;
}

这种方法的优点是什么,而不是定义标题中的所有常数值?

我知道的一个优势是,当您更改常数的值时,您只需要重新编译单个CPP文件,而不是直接或间接包含标头文件的每个文件。p>当您提供动态链接的库并想要对其进行修补而无需重新编译实际应用程序时,这可能特别有用。

一些缺点是

  • (正如Latedeveloper所写)您不能在需要定义的cppfile之外需要恒定表达式(例如数组界限或模板参数)的地方使用它们。
  • 您使优化器的生活更加艰难。
  • 从工具的角度来看,例如Intellisense不会向您显示其价值。

好吧,如果将其包含在一个以上的CPP文件中,则将其放入一个定义规则中。

但是,另一方面,您可以在标题中将其创建为ConstexPR。