在头文件或实现文件中定义常量的优点

时间:2016-12-16 19:33:04

标签: c++

在我工作的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;

}

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

3 个答案:

答案 0 :(得分:5)

我所知道的唯一优势是,您只需在更改常量值时重新编译单个cpp文件,而不是直接或间接包含头文件的每个文件。

当您提供动态链接库并希望在不重新编译实际应用程序的情况下对其进行修补时,这可能特别有用。

一些缺点是

  • (正如latedeveloper所写)你不能在需要常量表达式的地方使用它们(例如数组边界或模板参数),在你定义它的cppfile之外。
  • 你让优化者的生活更加艰难。
  • 从工具角度来看,例如intellisense不会显示它的价值。

答案 1 :(得分:-1)

嗯,有很多缺点。特别是,那些常量名称不能被#include头文件用作编译时常量。

答案 2 :(得分:-2)

好吧,如果将它包含在多个cpp文件中,通过将其放在标题中,您将遇到单定义规则。

但是,另一方面,你可以在我认为的标题中将其创建为constexpr。