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

命名空间的范围 我是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

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_local_常量”或“使用名称空间A_local_常量::val”的所有位置都将可见

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

    注意:“使用名称空间一些名称空间”应该谨慎使用,因为它们可能不必要地污染当前名称空间

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

    2) 全局存储器

    3) 此内容的范围在A_local_常量内,并且在我们使用“使用名称空间A_local_常量”或“使用名称空间A_local_常量::val”的所有位置都将可见

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


    注意:“使用名称空间一些名称空间”应该谨慎使用,因为它们可能不必要地污染当前名称空间

    似乎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);
    }