静态成员和未命名的名称空间

时间:2019-02-28 10:41:28

标签: c++

我试图正确地理解静态名称空间和未命名名称空间之间的关系,以及各种作用域中数据成员和函数的行为。但是,我无法找到列出所有这些情况的地方。 我为团队的“ C ++技术参考”写下了自己的解释,但首先我想确认自己写下的内容是正确的。

所以我们开始:

static对数据成员和函数有什么影响?

  • 在类数据成员上:与C#和Java中相同,该成员在该类的所有实例之间共享。
  • 在命名命名空间或全局成员上:该成员仅对当前翻译单元可见。每个使用它的翻译单位都会拥有自己的副本。
  • 在类函数上:该函数无法访问非静态数据成员和类函数,它没有此指针。

静态的命名命名空间或全局成员等效于未命名命名空间内的命名空间。 两者都使它仅对当前翻译单元可见。首选使用未命名的名称空间,而不使用静态名称空间。

通常,不是静态的全局或命名空间成员或在未命名空间中是错误的。 使用具有相同名称或签名的这种类型的成员链接多个目标文件将导致链接器错误,或者将省略除第一次出现的所有成员。 最后一种可能不是您通常想要的。

我在这里描述的内容正确吗?

0 个答案:

没有答案