и являются кандидатами. Теперь вызовы
libs_R_us::max( int, int );
libs_R_us::max( double, double );
Они и являются кандидатами. Теперь вызовы func() разрешаются следующим образом:
void func()
{
// using-объявление
// глобальная функция max( char, char ) скрыта
using libs_R_us::max;
max( 87, 65 ); // вызывается libs_R_us::max( int, int )
max( 35.5, 76.6 ); // вызывается libs_R_us::max( double, double )
max( 'J', 'L' ); // вызывается libs_R_us::max( int, int )
}
Using-директивы также оказывают влияние на состав множества функций-кандидатов. Предположим, мы решили их использовать, чтобы сделать функции max() из пространства имен libs_R_us видимыми в func(). Если разместить следующую using-директиву в глобальной области видимости, то множество функций-кандидатов будет состоять из глобальной функции max(char, char) и функций max(int, int) и max(double, double), объявленных в libs_R_us:
namespace libs_R_us {
int max( int, int );
double max( double, double );
}
char max( char, char );
using namespace libs_R_us; // using-директива
void func()
{
max( 87, 65 ); // вызывается libs_R_us::max( int, int )
max( 35.5, 76.6 ); // вызывается libs_R_us::max( double, double )
max( 'J', 'L' ); // вызывается ::max( int, int )
}
Что будет, если поместить using-директиву в локальную область видимости, как в следующем примере?
void func()
{
// using-директива
using namespace libs_R_us;
// те же вызовы функций, что и выше
}
Какие из функций max() окажутся среди кандидатов? Напомним, что using-директива делает члены пространства имен видимыми, словно они были объявлены вне этого пространства, в той точке, где такая директива помещается. В нашем примере члены libs_R_us видимы в локальной области функции func(), как будто они объявлены вне пространства – в глобальной области. Отсюда следует, что множество перегруженных функций, видимых внутри func(), то же, что и раньше, т.е. включает в себя
max( char, char );
Содержание Назад Вперед