在标题或实现文件中定义常数的优点
Merits of defining constants in header or implementation files
在我正在工作的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。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 表达式必须具有常数值,变量不能用作定义数组大小的常数
- 如何在 C 和 C++ 中定义字符常数?
- 定义.cpp中常数int/char*
- 我可以定义一个(键入的)常数,该常数确定不占据可执行文件中的空间
- 在标题或实现文件中定义常数的优点
- 在另一个带有名称空间的标头文件中定义常数
- 如何定义物理常数的结构
- 定义编译时常数的最佳方式
- 定义复常数 "i" C++(#define vs 常量)
- C++ --- 这些数学函数/常数不应该是未定义的吗?