C++.Бархатный путь




Совместно используемые функции - часть 3


Поскольку нуль имеет тип int, оба вызова сопоставляется со вторым вариантом совместно используемой функции.

2.Сопоставление с помощью расширения типа.

При таком сопоставлении производится приведение типа значения параметра в выражении вызова к типу параметра в определении функции. Для этого используется расширение типа.

Если ни для одного из вызовов точного сопоставления не произошло, то применяются следующие расширения типа:

  • Параметр типа char, unsigned char или short расширяются до типа int. Параметр типа unsigned short расширяется до типа int, если размер объекта типа int больше размера объекта типа short (это зависит от реализации). Иначе он расширяется до типа unsigned int.
  • Параметр типа float расширяется до типа double.

//Объявление пары совместно используемых функций... extern void FF(char *); //Вариант 1... extern void FF(int); //Вариант 2... //Вызов функции. FF('a');

Литера 'a' имеет тип char и значение, допускающее целочисленное расширение. Вызов сопоставляется со вторым вариантом совместно используемой функции.

3.Сопоставление со стандартным преобразованием. Применяется в случае неудачи сопоставления по двум предыдущим критериям сопоставления. Фактический параметр преобразуется в соответствии с правилами стандартных преобразований. Стандартное преобразование типа реализует следующие варианты сопоставления значений параметров в выражениях вызова и параметров объявления:

  • любой целочисленный тип параметра выражения вызова сопоставляется с любым целочисленным типом параметра, включая unsigned,
  • значение параметра, равное нулю, сопоставляется с параметром любого числового типа, а также с параметром типа указатель, а значение параметра типа указатель на объект (любого типа) будет сопоставляться с формальным параметром типа void*.

//Объявление пары совместно используемых функций... extern void FF(char *); //Вариант 1... extern void FF(float); //Вариант 2... //Вызов функции. FF(0);

В соответствии со вторым правилом стандартных преобразований, которое утверждает, что передача значения при вызове функции преобразует это значение в тип параметра функции, значение фактического параметра может быть преобразовано к значению указателя, т.е. к NULL. Вызов сопоставляется с первым вариантом функции.

Можно представить шкалу соответствия типа параметров в выражениях вызова параметрам множества совместно используемых функций. При этом:




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