Почему вызов функции разрешается в объявление using вместо директивы using в C++? [дубликат]C++

Программы на C++. Форум разработчиков
Anonymous
Почему вызов функции разрешается в объявление using вместо директивы using в C++? [дубликат]

Сообщение Anonymous »

Я немного не понимаю, какова точная причина компиляции следующего кода (и он не является неправильным):

Код: Выделить всё

namespace A
{
void f() { }
}

namespace B
{
void f() {}
}

int main()
{
using  A::f;
using namespace B;
f();

}
Мы различаем директиву использования и декларацию использования. Последний, будучи декларацией, добавляет объявления в декларативную область программы, тогда как первый просто делает определенные имена пригодными для использования в этой области. Очевидно, что директива using в этом отношении имеет гораздо меньшую силу. Таким образом, когда мы вызываем f(), поскольку мы уже объявили имя f в декларативной области с помощью объявления using, во время поиска квалифицированного имени (

Код: Выделить всё

ns_name::something
, ::something), имена в B вообще не будут проверяться.
Но потом я вспомнил о f(), компилятор будет используйте неквалифицированный поиск.

Подробнее здесь: https://stackoverflow.com/questions/786 ... irective-i

Вернуться в «C++»