1

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

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 对象吗?

4

1 回答 1

1

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

2) 全局内存

3) 此常量的范围在 A_local_constants 内,并且在我们使用“使用命名空间 A_local_constants”或“使用命名空间 A_local_constants::val”的所有地方都可见

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

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

于 2013-04-19T16:44:50.463 回答