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

时间:2013-04-05 04:28:27

标签: 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始终是{{1}}隐含的?

2 个答案:

答案 0 :(得分:26)

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

多重定义错误的原因是

const char * kActivePlayground = "kiddiePool";

使用外部链接创建变量。

嘿等等,我不是说const变量默认为静态链接?是的,我做到了。但kActivePlayground不是const。它是指向const的非const char指针。

这将按预期工作:

const char * const kActivePlayground = "kiddiePool";

答案 1 :(得分:0)

您可以使用常量字符数组

const char kActivePlayground[] = "kiddiePool";

和kActivePlayground也可以用于赋值,因为它是一个引用

const char* playground_text = kActivePlayground;