12 c++
我知道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
}
Run Code Online (Sandbox Code Playgroud)
(请告诉我为什么我不应该使用C风格的字符串的评论 - 这是遗留代码)
这个头文件包含在几个源文件中,并且一切正常(每个编译单元都有自己的副本char*).我本以为我可以删除static这些,因为它是多余的,但是当我这样做时,我得到关于已经在另一个对象中定义的符号的链接错误.我在这里错过了什么?难道这些const char*的不含蓄静态?
Dav*_*fer 17
在您的示例中,您正在创建指向常量(块)char的指针,而不是创建指向char的常量指针.因此,您的指针不是常量,因此不是隐式静态的.
你需要声明x为const char *const A,它创建一个指向常量(块)char的常量指针.