Язык С++ и программирование на нем. Рейзлин В.И. - 71 стр.

UptoLike

Составители: 

73
влекут за собой преобразований целых типов к плавающим и наоборот.
При этом подбирается функция, для которой число таких преобразова-
ний было бы минимально.
Пусть обращение к функции выглядит так:
float a=36.6;
j=func(‘a’, a);
Применяя указанные стандартные преобразования, найдём, что
будет вызвана функция с прототипом func(char, double) и аргумент а
будет преобразован к типу double.
Третьим этапом является подбор такой функции, для вызова кото-
рой достаточно осуществить любые стандартные преобразования аргу-
ментов (и опять так, чтобы этих преобразований было как можно мень-
ше).
Так, в операторе
int l=func(“ГОД:”, 2002.3);
будет вызвана функция func (char*, int), фактический аргумент типа
double которой будет преобразован к int с отбрасыванием дробной час-
ти числа.
На четвёртом этапе подбираются функции, для которых аргумен-
ты можно получить с помощью всех преобразований, рассмотренных до
этого, а также преобразований типов, определённых самим программи-
стом.
Если и в этом случае единственная нужная функция не найдена,
то на последнем, пятом этапе, компилятор пробует найти соответствие с
учётом списка неопределённых аргументов.
Так, при вызове
func (1, 2, 3);
подходит лишь одна функция func(float, …).
При обращении
int i, j, n;
n=func(&i, &j);
компилятор не найдёт ни одной подходящей функции и выдаст сообще-
ние об ошибке.