我是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);
}
所以我的问题是:
为什么静态函数validate()能够使用非静态常量val?
内存中创建的val在哪里?
这个常数的范围是什么?
是否始终在没有创建A对象的情况下在内存中创建?
答案 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”应该明智地使用,因为它们可能会不必要地污染当前命名空间。