命名空间的范围 我是C开发人员,最近才切换到C++,所以名称空间是新的东西。 类有一个静态方法validate(),所以它只能访问类的静态变量或常量。但是,如果A.cpp在命名空间中定义了一个常量,则val()可以使用该常量,并且下面的代码已正确编译
A.h A.cpp 所以我的问题是:命名空间的范围 我是C开发人员,最近才切换到C++,所以名称空间是新的东西。 类有一个静态方法validate(),所以它只能访问类的静态变量或常量。但是,如果A.cpp在命名空间中定义了一个常量,则val()可以使用该常量,并且下面的代码已正确编译,c++,namespaces,static-functions,C++,Namespaces,Static Functions,A.h A.cpp 所以我的问题是: 为什么静态函数validate()能够使用非静态常量val val在内存中的何处创建 这个常数是什么范围 它总是在内存中创建,而不创建对象吗 1) “using namespace A_local_constants;”此语句拖出在A_local_constants中定义的所有符号,因此bool A::validate(const int num)可以引用val 2) 全局存储器 3) 此内容的范围在A_local_常量内,并且在我们使用“使用名称空间A_l
注意:“使用名称空间一些名称空间”应该谨慎使用,因为它们可能不必要地污染当前名称空间 似乎OP在#1中意味着其他东西(注意
static
keyword)。似乎OP在#1中意味着其他东西(注意static
keyword)。
class A
{
public:
A();
static bool validate(const int num);
};
A::A()
{
// Do nothing. Just an example.
}
namespace A_local_constants
{
const int val = 1;
}
using namespace A_local_constants;
bool A::validate(const int num)
{
return (num == val);
}