С++ для начинающих




Наилучшая из устоявших функция - часть 2


Такая совокупность состоит из нескольких преобразований, применяемых в указанном порядке:

преобразование l-значения ->

     расширение типа или стандартное преобразование ->

          преобразование спецификаторов

Термин преобразование l-значения относится к первым трем трансформациям из категории точных соответствий, рассмотренных в разделе 9.2: преобразование l-значения в r-значение, преобразование массива в указатель и преобразование функции в указатель. Последовательность трансформаций состоит из нуля или одного преобразования l-значения, за которым следует нуль или одно расширение типа или стандартное преобразование, и наконец нуль или одно преобразование спецификаторов. Для приведения фактического аргумента к типу формального параметра может быть применено только одна трансформация каждого вида.

Описанная последовательность называется последовательностью стандартных

преобразований. Существует также последовательность определенных пользователем преобразований, которая связана с функцией-конвертером, являющейся членом класса. (Конвертеры и последовательности определенных

пользователем преобразований рассматриваются в главе 15.)

Каковы последовательности изменений фактических аргументов в следующем примере?

namespace libs_R_us {

   int max( int, int );

   double max( double, double );

}

// using-объявление

using libs_R_us::max;

void func()

{

   char c1, c2;

   max( c1, c2 );   // вызывается libs_R_us::max( int, int )

}

Аргументы в вызове функции max() имеют тип char. Последовательность преобразований аргументов при вызове функции libs_R_us::max(int,int) следующая:

1a.  Так как аргументы передаются по значению, то с помощью преобразования l-значения в r-значение извлекаются значения аргументов c1 и c2.

2a.  С помощью расширения типа аргументы трансформируются из char в int.

Последовательность преобразований аргументов при вызове функции libs_R_us::max(double,double) следующая:

1b.  С помощью преобразования l-значения в r-значение извлекаются значения аргументов c1 и c2.




Содержание  Назад  Вперед