c++ - 为什么我们应该只在类或函数 (C++) 中使用 'static'?

标签 c++ static keyword linkage

我最近在阅读 Stroustrups The C++ Programming Language,在第 9 章有关 Linkage 的部分中,我看到了以下段落:

"In C and older C++ programs, the keyword static is (confusingly) used to mean "use internal linkage". Don't use static except inside functions and classes."

问题是进一步阅读,作者没有详细说明为什么这是不好的做法。我不时在我的代码中使用静态函数,通常是为了一些在编译单元之外不需要的简单计算,但我从来没有意识到这是不受欢迎的,而且我也不清楚为什么它不好。任何人都可以为我阐明这一点吗?

最佳答案

我认为这个想法不是反对内部链接,而是为了避免与 static 的新含义混淆:static 有太多含义(声明东西具有内部链接,定义具有静态存储持续时间的局部变量,标记类的非实例成员),因此避免使用不太直观的方法是一件好事。

因此,C++98 标准提供了另一种声明带有内部链接的内容的方法:unnamed namespaces , 并弃用 static “在命名空间范围内声明对象时”。

C++11 标准取消了这个弃用(并且还以某种方式改变了未命名命名空间的语义,实际上并不需要内部链接),所以它现在真的是一个风格问题。

关于c++ - 为什么我们应该只在类或函数 (C++) 中使用 'static'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11298196/

相关文章:

c++ - 将对象数组内容写入文件和从文件写入

c++ - 是否有工具可以检查对 C++ 类的更改是否会破坏该类的先前版本?

java - 拥有一个类的单个实例更好,还是拥有一堆静态方法更好?

php - 如何使用 php 检索 youtube 视频关键字

c# - C#中的关键字实现

c++ - fork() 输出链

c++ - 如何查找 QTextEdit 中显示的数据长度

asp.net - 如何访问 Global.asax 静态成员?

asp.net - ASP.Net静态对象

javascript - 如何抓取 Google 关键字工具?