【发布时间】:2021-02-04 07:17:52
【问题描述】:
我有以下问题。在 .hpp 文件中,我有一个必须使用命名空间全局变量的函数 Space::foo(),我想将其隐藏在匿名命名空间中。但现在我想知道,我是否会冒险在每个翻译单元中定义 values 并使用多个副本,或者只有一个?感谢您的帮助。这是因为我需要 Space 命名空间中的一堆函数以及一种私有数据部分(匿名命名空间的东西),因此 Space 有点像一个只有静态成员的类,但我不如果我将 .hpp 文件包含在不同的单元中,则不希望拥有这些变量的多个副本。
// .hpp file
#include <array>
namespace Space {
namespace {
constexpr std::array<int, 10000> fill() { /* ... */ };
inline constexpr std::array<int, 10000> values = fill();
}
inline int foo(int i) {
return values[i];
}
}
【问题讨论】:
-
是的,对不起。如果我不清楚我只想在我的程序中有一个值的实例,它在编译时预先计算,然后在运行时通过 Space::foo 访问。
标签: c++ inline constexpr c++20 linkage