命名空间的范围

时间:2013-04-19 16:34:31

标签: c++ namespaces static-functions

我是C开发人员,最近才转向使用C ++,因此命名空间是新学习的东西。 A类有一个静态方法validate(),因此它只能访问A类的静态变量或常量。但是如果A.cpp在命名空间中定义了常量,则val()能够使用常量,并且下面的代码被正确编译。

A.H

class A
{
    public:
    A();
    static bool validate(const int num);
};

A::A()
{
    // Do nothing. Just an example.
}

A.cpp

namespace A_local_constants
{
    const int val = 1;
}

using namespace A_local_constants;

bool A::validate(const int num)
{
    return (num == val);
}

所以我的问题是:

  1. 为什么静态函数validate()能够使用非静态常量val?

  2. 内存中创建的val在哪里?

  3. 这个常数的范围是什么?

  4. 是否始终在没有创建A对象的情况下在内存中创建?

1 个答案:

答案 0 :(得分:1)

1)“使用命名空间A_local_constants;”这个陈述拖出了A_local_constants中定义的所有符号,因此bool A :: validate(const int num)可以引用val。

2)全球记忆

3)此内容的范围在A_local_constants内,并且在我们使用“using namespace A_local_constants”或“using namespace A_local_constants :: val”

的所有地方也可见。

4)A类与常数val之间没有关系。

注意:“使用命名空间some_name_space”应该明智地使用,因为它们可能会不必要地污染当前命名空间。