Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Int myfunc(double d);
. . . cout << myfunc('c'); // Ошибки нет, выполняется преобразование типов. Как отмечено в комментарии, ошибки здесь нет, поскольку C++ автоматически преобразует символ 'c' в его double-эквивалент. Вообще говоря, в C++ запрещено довольно мало видов Преобразований типов. Несмотря на то что автоматическое преобразование типов — это очень Удобно, оно, тем не менее, является главной причиной неоднозначности. Рассмотрим Следующую программу. // Неоднозначность вследствие перегрузки функций. #include <iostream> Using namespace std; Float myfunc(float i); Double myfunc(double i); Int main() { // Неоднозначности нет, вызывается функция myfunc(double). cout << myfunc (10.1) << " "; // Неоднозначность. cout << myfunc(10); Return 0; } Float myfunc(float i) { Return i; } Double myfunc(double i) { Return -i; } Здесь благодаря перегрузке функция myfunc() может принимать аргументы либо типа float, Либо типа double. При выполнении строки кода cout << myfunc (10.1) << " "; не возникает никакой неоднозначности: компилятор "уверенно" обеспечивает вызов Функции myfunc(double), поскольку, если не задано явным образом иное, все литералы с плавающей точкой в C++ автоматически получают тип double. Но при вызове функции myfunc() с Аргументом, равным целому числу 10, в программу вносится неоднозначность, поскольку компилятору неизвестно, в какой тип ему следует преобразовать этот аргумент: float или double. Оба преобразования допустимы. В такой неоднозначной ситуации будет выдано сообщение об Ошибке, и программа не скомпилируется. На примере предыдущей программы хотелось бы подчеркнуть, что неоднозначность в ней Вызвана не перегрузкой функции myfunc(), объявленной дважды для приема double- и float- Аргумента, а использованием при конкретном вызове функции myfunc() аргумента Date: 2016-07-25; view: 307; Нарушение авторских прав |