Я разработчик 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);
}
Итак, мой вопрос:
Почему статическая функция validate () может использовать нестатическую константу val?
Где Валь создан в памяти?
Какова область действия этой константы?
Всегда ли он создается в памяти без создания объекта A?
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» следует использовать разумно, поскольку они могут излишне загрязнять текущее пространство имен.
Других решений пока нет …