Статья: Функции в С++

К параметрам функций с перегруженными именами стандартные C++ правила преобразования применяются не полностью. Преобразования, могущие уничтожить информацию, не выполняются. Остаются int в long, int в double, ноль в long, ноль в double и преобразования указателей: ноль в указатель, ноль в void*, и указатель на производный класс в указатель на базовый класс .

Вот пример, в котором преобразование необходимо:

overload print(double), print(long);

void f(int a);

{

print(a);

}

Здесь a может быть напечатано или как double, или как long. Неоднозначность разрешается явным преобразованием типа (или print(long(a)) или print(double(a))).

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

Например:

overload pow;

int pow(int, int);

double pow(double, double); // из

complex pow(double, complex); // из

complex pow(complex, int);

complex pow(complex, double);

complex pow(complex, complex);

Процесспоискаподходящейфункцииигнорирует unsigned и const.

Незаданное Число Параметров

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

Например:

int printf(char* ...);

Это задает, что в вызове printf должен быть по меньшей мере один параметр, char*, а остальные могут быть, а могут и не быть.

Например:

printf("Hello, world\n");

printf("Моеимя %s %s\n", first_name, second_name);

printf("%d + %d = %d\n",2,3,5);

Такая функция полагается на информацию, которая недоступна компилятору при интерпретации ее списка параметров. В случае printf() первым параметром является строка формата, содержащая специальные последовательности символов, позволяющие printf() правильно обрабатывать остальные параметры. %s означает "жди параметра char*", а %d означает "жди параметра int". Однако, компилятор этого не знает, поэтому он не может убедиться в том, что ожидаемые параметры имеют соответствующий тип.

Например:

К-во Просмотров: 541
Бесплатно скачать Статья: Функции в С++