используя директиву и объявление в C ++ - PullRequest
2 голосов
/ 27 октября 2019

имеет ли директива using локальную область видимости ??

В книге учебников по С ++ я обнаружил, что "директива using в функции обрабатывает имена пространств имен как объявленные вне функции"

, если онаэто как объявлено вне функции, почему он не делает эти имена доступными для других функций в файле.

namespace Jill 
{ 
    double bucket(double n) { ... } 
    double fetch; 
    struct Hill { ... }; 
}
int main()
{
    using namespace Jill;
    return 0;
}
int foom()
{
    Hill top;              //error
    Jill::Hill crest;     //valid
}

, если утверждение "директива using в функции обрабатывает имена пространств имен как объявленные вне функции", является истинным, чем

`Hill top`

было бы допустимым?

1 Ответ

3 голосов
/ 27 октября 2019

"директива using в функции обрабатывает имена пространств имен как объявленные вне функции"

Имена пространств имен обрабатываются как объявленные вне функции, но не будутизменить поведение реализации других функций, т. е. эти имена будут видны только в функции, устанавливающей директиву using, они не будут видны в других функциях.

С другой стороны, если естьОбъявление локальной функции в области видимости функции будет сначала выбрано не тем, которое введено директивой using.

например

namespace Jill 
{ 
    double bucket(double n) { std::cout << "Jill::bucket\n"; return 0.0; } 
    double fetch; 
    struct Hill {}; 
}

int main()
{
    double bucket(double);
    using namespace Jill;
    bucket(0.0); // ::bucket but not Jill::bucket will be selected
    return 0;
}

double bucket(double n) { std::cout << "::bucket\n"; return 0.0; } 

LIVE

...