2013-04-19 4 views
1

Я разработчик 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() может использовать нестатический константу Вэл?

  2. Где находится val, созданный в память?

  3. В какой области эта константа?

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

ответ

1

1) "использование пространства имен A_local_constants;" этот оператор вытягивает все символы, определенные в A_local_constants, поэтому bool A :: validate (const int num) может ссылаться на val.

2) Глобальная память

3) Объем этого Contant находится в A_local_constants, а также будут видны во всех тех местах, где мы используем «с использованием пространства имен A_local_constants» или «с использованием пространства имен A_local_constants :: VAL»

4) Между классом A и константой val нет никакой связи.

Примечание: использование пространства имен some_name_space должно использоваться разумно, поскольку они могут излишне загрязнять текущее пространство имен.

+0

Кажется, что OP означало что-то еще в # 1 (обратите внимание на ключевое слово 'static'). –

Смежные вопросы