Область пространства имен

Я разработчик 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. Где Валь создан в памяти?

  3. Какова область действия этой константы?

  4. Всегда ли он создается в памяти без создания объекта A?

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» следует использовать разумно, поскольку они могут излишне загрязнять текущее пространство имен.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]