【发布时间】:2017-08-16 10:06:34
【问题描述】:
在 C++1z 中声明内存高效全局常量 的最佳方法是什么?internal linkage ,所以在所有 translation units 中使用单个副本?
虽然在很多地方都提到过,但我们没有任何单一的“最佳方法”问题和答案,所以在这里。以下是我发现相关问题的部分地点列表。
- constexpr global constants in a header file and odr
- global declarations/initializations using static, const, constexpr
- Global Constants in C++11
- Defining global constant in C++
- c++ global constants issue
- Global Constants vs. Enumeration
- Proper way to make a global “constant” in C++
我正在寻找至少适用于所有基本基本类型的解决方案,例如 int、double、char、std::string。
编辑 1: 最好的方式,我的意思是“内存效率”。我知道对于内部链接,每个翻译单元都会制作多个副本,因此会占用内存。除此之外,如果我们能够实现快速的执行时间和编译时间,那就太好了,美化(易于)代码并不重要。我也知道外部链接会增加获取时间,因为处理器可能会在运行时出现缓存未命中。但是最新的 C++ 语言是否支持所有这些的最佳方法?或者可能会为每个案例提供建议支持?
注意:另外,std::string 全局常量的最佳方法是什么? mutability 会不会对 constness 有影响?
【问题讨论】:
-
只是don't use globals。
-
@HenriMenke 但是有一些常量是应用方面的,比如 PI 的值,或者一些需要在任何地方调用的标准错误消息。
-
标准库似乎更喜欢
inline constexpr。 -
@HenriMenke 你在第一个 cmets 中提到的是关于全局 变量,这个问题是关于全局 constants。
-
@HenriMenke C++ Core Guidelines 建议 Global constants are useful.