【问题标题】:Accessibility of variables变量的可访问性
【发布时间】:2011-04-03 15:15:10
【问题描述】:

嗨,

我对变量的可访问性有一点疑问。

int i; //default the linkage is external
const int i; //default linkage is internal
extern int i; //explicitly assigning linkage as external



class a
    {
        int l;  //Default linkage is external
        void f() 
        {
          int k; //default linkage is external
        }
    }

这个link 说 默认链接对于非常量符号是外部的,对于常量符号是静态(内部)。

int i 是否可以在没有外部关键字的情况下在其他文件中访问? 类和函数中存在的变量呢?

如何对匿名命名空间中存在的函数以及它们有什么联系?

namespace //members of anonymous namespace
{
 class C{};
 int x;
 }

【问题讨论】:

标签: c++ class static namespaces constants


【解决方案1】:

int i; 具有外部链接,并且位于普通命名空间中,因此可以从其他文件访问。他们必须在同一命名空间(在本例中为全局命名空间)中声明 extern int i; 才能访问它。

无法从其他文件访问未命名命名空间的成员 - 这就是命名空间的用途。虽然它们可以有外部链接,但它们的命名空间对于当前文件是唯一的,因此另一个文件中的相同声明将引用不同的东西,该文件是唯一的。

【讨论】:

    【解决方案2】:

    参考here

    未命名命名空间中的名称具有内部链接。

    【讨论】:

    • 嗨,谢谢,函数中声明的变量怎么办,它们没有链接还是什么?
    • @chubsdad:不,他们没有。未命名命名空间中的名称与任何其他命名空间中的名称具有相同的链接:外部或内部用于常量数据。
    • @Mike Seymour:是的,你是对的。脚注说“尽管未命名命名空间中的实体可能具有外部链接,但它们实际上是由其翻译单元唯一的名称限定的,因此永远无法从任何其他翻译单元看到。”
    猜你喜欢
    • 1970-01-01
    • 2011-01-11
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多