gpt4 book ai didi

c++ - 将 const 放在标题中

转载 作者:IT老高 更新时间:2023-10-28 22:33:00 28 4
gpt4 key购买 nike

根据我正在阅读和测试的所有内容,无法(没有预处理器宏)在共享 header 中定义常量并确保每个 TU 不会为该常量创建自己的存储。

我可以这样做:

const int maxtt=888888;

完全一样:

static const int maxtt=888888;

如果此 header 是共享的,它将起作用,但每个 TU 都会获得自己的 maxtt 拷贝。我也可以这样做,以防止:

extern const int maxtt;

但是我不能在这里定义 maxtt;必须在 CPP 中完成以避免链接器错误。

我的理解正确吗?

最佳答案

由于变量是常量,因此每个 TU 都有自己的拷贝这一事实通常是无关紧要的。

由于这个原因,在 C++ 中,命名空间范围内的常量是隐含的 static。通常,与只有一个带有外部链接的实例相比,这允许更好代码,因为(如果变量实际上是一个常量表达式)常量通常可以直接折叠到使用站点中并且不会'根本不需要存储。

因此,除非您真的需要获取常量的地址或类似的东西,否则您应该坚持使用静态版本。 (正如您已经观察到的,您可以通过添加 extern 来强制外部链接。)另一个原因可能是您正在动态初始化并且只希望 one 调用初始化程序:

// header:
extern int const n;

// one implementation:
int const n = init_function_with_side_effects();

静态构造(int const n = init(); 在 header 中)将导致函数在每个 TU 中调用一次。

关于c++ - 将 const 放在标题中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com