Почему вызов функции разрешается в объявление 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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