gpt4 book ai didi

c++ - 命名空间范围内的 const 变量不是隐式静态的吗?

转载 作者:IT老高 更新时间:2023-10-28 23:15:24 24 4
gpt4 key购买 nike

我知道命名空间范围内的 static const int x = 42; 等价于 const int x = 42; 因为 const 变量是隐式 static (必须将它们声明为 extern 才能获得外部链接)。每个包含此声明的翻译单元都会获得 x 的本地拷贝。

这是否仅适用于某些(可能是整数?)类型?我在头文件中有以下代码:

namespace XXX {
static const char* A = "A";
static const char* B = "B";
static const char* C = "C"; // and so on
}

(请不要评论为什么我不应该使用 C 风格的字符串——这是遗留代码)

这个头文件包含在几个源文件中,一切都很好(每个编译单元都有自己的这些 char* 的拷贝)。我原以为我可以从这些中删除 static ,因为它是多余的,但是当我这样做时,我会收到有关已在另一个对象中定义的符号的链接错误。我在这里想念什么?这些 const char*not 是隐式静态的吗?

最佳答案

在您的示例中,您正在创建指向常量( block )char 的指针,而不是创建指向 char 的常量指针。因此,您的指针不是常量,因此也不是隐式静态的。

您需要将 x 声明为 const char *const A,这会创建一个指向常量( block )char 的常量指针。

关于c++ - 命名空间范围内的 const 变量不是隐式静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2380720/

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