c ++变量可见性

时间:2011-05-21 02:13:01

标签: c++

请先阅读第二次编辑。

我正在寻找能够详细解释c / c ++内存管理模型的书籍或网站。我想要了解的其中一件事是:

namespace A {
    SomeClass A;
}

VS

namespace A {
    static SomeClass A;
}

VS

SomeClass A;

VS

static SomeClass A;

非常感谢。

编辑: 对不起,我把这些概念混合在一起,并提出了错误的问题。

2 个答案:

答案 0 :(得分:1)

命名空间允许在名称下对类,对象和函数等实体进行分组。这样,全局范围可以划分为“子范围”,每个范围都有自己的名称。

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

例如: 不使用命名空间你会写:     #include

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

但是你也可以写:     #包括     使用namespace std;

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..)
    {
    }
}

当您不需要物体时,Latter更适合。没有班级没有对象......

在两种情况下,在命名空间中包含一个类允许您使用通用名称对实体进行分组。

答案 1 :(得分:0)

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

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

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

如果我错了,请再次纠正我,但据我所知,这就是它。