我经常在标题中看到
//global namespace, not in class
static const int my_global =1984;
但最近我了解到 const 意味着内部链接,所以我想知道这不会使静态不必要吗?
这取决于。在 C++ 中,它是不必要的,但有些人(包括我自己)喜欢把它放进去,理由是说我们的意思。当然,如果头文件也要在 C 中使用,这是必要的(但对于 C 中的许多用途,你需要一个#define
.
在 C++ 中,没有必要(冗余)使用 static 关键字来防止全局链接,因为 const 对标准 C++(C++98、C++03、C++11)执行此操作。然而,在 C 中,static 关键字对于变量具有本地(文件)链接是必需的。由于许多 C 编码实践已经习惯性地带入了 C++(有很多重叠),有些人可能会不假思索地把这个习惯带到 C++ 中。我听说 C++ 中表示非全局链接的冗余静态关键字有助于 C 程序员理解。
我自己更喜欢使用 C++ 习语在 C++ 中编程的精确性,这样我们就不会在 C++ 中延续 C 代码,这可能会导致细微的错误,或者至少是浪费和冗余代码(例如在调用 delete 之前习惯性检查 NULL在指针上。