C++ 变量可见性

c++ variable visibility

本文关键字:可见性 变量 C++      更新时间:2023-10-16

请先阅读第二篇编辑。

我正在寻找详细解释 c/c++ 内存管理模型的书籍或网站。 我试图理解的一件事是:

namespace A {
    SomeClass A;
}

namespace A {
    static SomeClass A;
}

SomeClass A;

static SomeClass A;

谢谢。

编辑:很抱歉造成混乱,我将概念混合在一起,并问了错误的问题。

命名空间允许将类、对象和函数等实体分组到一个名称下。这样,全局作用域可以划分为"子作用域",每个子作用域都有自己的名称。

使用关键字 using 将命名空间中的名称引入当前声明性区域。

例如:不使用命名空间,您将编写: #include

int main () {
  std::cout << "Hello world!n";
  return 0;
}

但是,您也可以编写: #include 使用命名空间标准;

int main () {
  cout << "Hello world!n";
  return 0;
}

这允许您不在每个之前附加 napespace 标识符

C++静态类与其他OOP语言不同没有任何意义。可以使用静态数据成员方法。

相反,您可以创建:

1.类中的静态方法

class SomeClass
{
public:  static void myMethod(int x..)
    {
    }
}

2.在命名空间中创建自由函数

namespace A 
{
    void myMethod(int x..)
    {
    }
}

当您不需要对象时,后者更适合。没有类没有对象...

这两种情况下,将类括在命名空间中都允许您将实体分组到公用名下。

首先,命名空间只有在编译之前才知道,之后它们就不存在了。也就是说,你的前半部分与最终节目的后半部分没有什么不同,至少据我所知。如果我错了,请纠正我。

然后,如果static SomeClass ASomeClass A都在全局范围(文件级别),那么它们也是相同的。

接下来,如果两个声明都在 classstruct 或函数内,那么static版本也将放入可执行文件的数据段中,而非static变体将是普通的堆栈变量。

再次,如果我错了,请纠正我,但据我所知,仅此而已。