为什么全局const char需要"静态"而不是bool?

joh*_*ers 11 c++ static global-variables

共享标头.

我可以做这个:

const bool kActivatePlayground=false;

包含在多个文件中时工作正常.

我不能做到这一点:

const char * kActivePlayground = "kiddiePool";

导致错误:重复符号.

但这有效:

static const char * kActivePlayground = "kiddiePool";

为什么static需要const char *而不是为了const bool?另外,我认为static没有必要,因为const总是static隐含的?

Ben*_*igt 26

在C++中,const默认情况下变量具有静态链接,而非const变量具有外部链接.

多重定义错误的原因是

const char * kActivePlayground = "kiddiePool";
Run Code Online (Sandbox Code Playgroud)

使用外部链接创建变量.

嘿等等,我不是只说const变量默认为静态链接?是的,我做到了.但kActivePlayground事实并非如此const.它是一个非const指针const char.

这将按预期工作:

const char * const kActivePlayground = "kiddiePool";
Run Code Online (Sandbox Code Playgroud)

  • 这就是为什么我会争论(反对说英语的人)`const`总是应该在它的合格的*右*,`const char*`可能让你怀疑,但`char const*`不会. (2认同)