Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2013, 17:55   #1
ViktorKozlov
Пользователь
 
Регистрация: 24.02.2013
Сообщений: 10
По умолчанию Перегрузка функции

Доброго времени суток

Допустим, есть перегруженная функция

Код:
void func(long f, long g, int q){cout<<"1";}
void func(long f, int g, int q){cout<<"2";}
 
int main()
{
    int a=4;
    long r=5;
    func(r,r,r);
Чем руководствуется компилятор, когда определяет, какую именно функцию вызвать? В данном случае будет вызываться первая, но, видимо, не потому, что там совпадений больше, ведь если написать (int f, long g, long q), то будет неоднозначность.
ViktorKozlov вне форума Ответить с цитированием
Старый 22.03.2013, 18:11   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Вот для этого нужно явно делать приведение типов.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 22.03.2013, 18:17   #3
ViktorKozlov
Пользователь
 
Регистрация: 24.02.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Вот для этого нужно явно делать приведение типов.
Это-то понятно, но как все-таки определяется, какая функция должна вызываться? Если написать первую функцию как func(int f, long g, long q), то уже ругается на неоднозначность, хотя не совпадает все также только один тип
ViktorKozlov вне форума Ответить с цитированием
Старый 22.03.2013, 18:20   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Это-то понятно, но как все-таки определяется, какая функция должна вызываться?
Копайте в направлении стандарта, точнее него никто не скажет. По-моему, различаются понижающие и повышающие приведения, но спокойно могу перепутать.
Abstraction вне форума Ответить с цитированием
Старый 22.03.2013, 18:27   #5
ViktorKozlov
Пользователь
 
Регистрация: 24.02.2013
Сообщений: 10
По умолчанию

Abstraction,
Ну да, long вроде как выше int считается, поэтому здесь как-бы понижающее приведение с возможной потерей данных. В стандарте я нашел примеры только с одним аргументом, но это и так ясно, а вот как выбирается кандидат в случае с несколькими параметрами, при условии, что какие-то из них совпадают по типу с аргументами в вызывающей функции, а какие-то нет, пока не понятно
ViktorKozlov вне форума Ответить с цитированием
Старый 23.03.2013, 09:40   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Сообщение от ViktorKozlov Посмотреть сообщение
Abstraction,
Ну да, long вроде как выше int считается, поэтому здесь как-бы понижающее приведение с возможной потерей данных. В стандарте я нашел примеры только с одним аргументом, но это и так ясно, а вот как выбирается кандидат в случае с несколькими параметрами, при условии, что какие-то из них совпадают по типу с аргументами в вызывающей функции, а какие-то нет, пока не понятно
Если в стандарте не указано, то на усмотрение компилятора (точнее разработчика компилятора). По факту, оно может оказаться "на усмотрение компилятора" даже, если в стандарте описано иное.


Интереса ради проверьте в другом компиляторе (очень желательно от другого производителя).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка функции С++ Косиус Помощь студентам 3 21.03.2013 23:07
перегрузка функции.. YaDenis Помощь студентам 0 10.01.2013 23:56
перегрузка функции на С++ erfo Помощь студентам 0 23.05.2012 18:32
Перегрузка функции.С++ jagger Помощь студентам 8 11.11.2010 22:27
Перегрузка функции в С++ Vultar Помощь студентам 7 19.11.2009 13:12