Объявление использования не может повторяться в области действия функции. Это почему?

В [namespace.udecl]/10 у вас есть следующий пример:

namespace A {
    int i;
}
namespace A1 {
    using A::i;
    using A::i; // OK: double declaration
}
void f() {
    using A::i;
    using A::i; // error: double declaration
}

Этот фрагмент компилируется в лязг.

1 ответ

Первое - это объявление внутри пространства имен, а операторы множественного использования могут часто происходить с использованием #include. Второе - внутри определения функции, и вы бы никогда этого не сделали, если бы не сделали ошибку. Например, вы не можете определить один и тот же символ дважды, но вы можете объявить несколько раз.

Оператор using - это не просто объявление. Это немного сильнее, так как он импортирует функцию из одного пространства имен в другое. Например, он может вытянуть защищенную функцию-член базового класса в производный класс, сделав его общедоступным. Это почти определение по связи.

Другие вопросы по тегам