【发布时间】:2010-09-14 13:16:20
【问题描述】:
具体在 C++ 中,例如之间的语义差异是什么:
static const int x = 0 ;
和
const int x = 0 ;
static 作为链接和存储类说明符(即在函数内部和外部)。
【问题讨论】:
-
static可能是 C++ 中最重载的关键字。您的代码的含义根据它是在命名空间范围、类范围还是在函数范围内变化很大。你可能想澄清一下。 -
@sbi:我以为我已经做到了。函数范围(它是存储类说明符)和文件范围(它是链接说明符)。关于这个问题,我并不特别关心类成员和命名空间范围的变量,尽管如果有人觉得有一个有趣的区别,也可以随意讨论。
-
@Clifford:很抱歉我忽略了最后的话。但是,这暴露了您的一个误解:在 C++ 中,文件范围 是 命名空间范围。如果您在任何命名空间之外声明任何内容,它将仅属于 全局命名空间(并且可以通过前缀
::访问,前面没有标识符)。我不知道全局命名空间和嵌套在其中的任何命名空间之间有任何有意义的区别。当然没有任何关于static的对象。 -
linkage 与 visibility 不同,如果将它们互换使用,您会混淆与您交谈的人,也可能会混淆您自己。跨度>
-
@Ben, @sbi:我并不是要暗示 文件范围 和 静态链接 是相同的,只是静态链接 暗示文件范围。从这个意义上说,范围(或可见性)是静态和外部链接的属性,而不是两者的同义词。我觉得最初的问题仍然清晰且结构良好,我们只是在讨论为回应 sbi 有点居高临下的言论而提出的 cmets。我们在这里讨论的是不精确的英语语义,而不是我的理解,所以我想我们可以停下来了。
标签: c++