声明const全局变量时是否需要静态?

时间:2012-12-27 10:54:48

标签: c++ static linkage

经常在我看到的标题中

//global namespace, not in class
static const int my_global =1984;

但是最近我了解到const意味着内部联系,所以我想知道不会使静态不必要吗?

2 个答案:

答案 0 :(得分:6)

这取决于。在C ++中,它是不必要的,但有些人(包括我自己)喜欢把它放进去,理由是说出我们的意思。当然,如果要在C中使用标题,则必须使用(但对于C中的许多用途,您需要#define)。

答案 1 :(得分:1)

在C ++中,使用static关键字来防止全局链接是不必要的(冗余),因为const为标准C ++(C ++ 98,C ++ 03,C ++ 11)执行此操作。但是,在C中,static关键字是变量具有本地(文件)链接所必需的。由于许多C编码实践已经被习惯带入了C ++(存在很多重叠),有些人可能会在没有思考的情况下结束这种习惯。我听说它认为C ++中的冗余静态关键字表示非全局链接有助于C程序员理解。

我自己更喜欢使用C ++习语在C ++中编程的精确性,因此我们不会在C ++中使C代码永久化,这可能会导致细微的错误,或者至少是浪费和冗余的代码(比如习惯性的检查)在指针上调用delete之前为NULL。