2010-11-06 3 views
1

Дано:Использование-декларации для перемещения имени в другое пространство имен?

namespace One { 
    void foo(int x) { 
    munch(x + 1); 
    } 
}; 

namespace Two { 
    // ... see later 
} 

... 
void somewhere() { 
    using namespace Two; 
    foo(42); 
    ... 

есть какая-то разница между следующими двумя вариантами:

)

namespace Two { 
    void foo(int x) { 
    munch(x + 1); 
    } 
}; 

и б)

namespace Two { 
    using One::foo; 
}; 

EDIT: Это довольно ясно, что (а) дублирует код, который никогда не должен быть хорошей идеей. Вопрос в большей степени касается разрешения перегрузки и т. Д. ... что, если есть другие foo s или munch es в возможно других пространствах имен?

+0

«Использование One :: foo;» называется служебной декларацией; директива using - «использование пространства имен N;». – 2010-11-06 19:39:31

ответ

1

С, они на самом деле разные функции, но с Ь, эти две функции идентичны:

assert(&One::foo == &Two::foo); 

Это редко дело; большая проблема заключается в дублировании логики.

0

Что касается использования, то они эквивалентны. Что касается кода, в случае а) вы дублируете функцию foo(). То есть обе версии предоставят функцию foo() внутри Two, но случай a) генерирует код для foo дважды, потому что у компилятора нет никакого намека на обнаружение, это та же функция.

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