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

mat*_*975 6 c++ static keyword linkage

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

"在C和较旧的C++程序中,关键字static(混淆)用于表示"使用内部链接".除了函数和类之外,不要使用静态."

问题是,进一步阅读,作者没有详细说明为什么这是不好的做法.我经常在我的代码中使用静态函数进行一些简单的计算,这在编译单元之外是不需要的,但是我从来没有意识到这是不赞成的,而且我不明白为什么它是坏的.有人可以为我解释这个吗?

Mat*_*lia 5

我认为这个想法不是对内部联系不屑一顾,而是为了避免与新含义混淆static:static有太多含义(用内部联系声明内容,用静态存储持续时间定义局部变量,标记类的非实例成员) ),所以避免一个不太直观的是一件好事.

因此,C++ 98标准提供了另一种使用内部链接声明内容的方法:未命名的命名空间,并static在声明命名空间范围内的对象时弃用".

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

  • 未命名的命名空间确实_not_使其内容具有内部链接.它们将它放在一个名称空间中,该名称空间不能在翻译单元之外命名,但链接仍然是外部的,这对模板有所不同. (3认同)