Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 2
Регистрация: 04.07.2015
Сообщений: 187
1

Неясный вызов функции

23.08.2016, 15:54. Показов 405. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеются две функции
C++
1
2
3
4
5
6
7
8
9
10
11
void may(char a) {
    using std::cout;
    using std::endl;
    cout << "void may char a" << endl;
}
 
void may(const char &a) {
    using std::cout;
    using std::endl;
    cout << "void may const char &a" << endl;
}
И вызов
C++
1
may('B');
В результате неоднозначный вызов функции. Я не могу понять почему void may(const char &a) является однозначным void may(char a), ведь вызов may('B') передает значение, даже не переменную. Объясните пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2016, 15:54
Ответы с готовыми решениями:

Неясный trackback
в моем блоге, недавно заметил странную штуку, в данном посте, с каждым днем растет показатель...

Неясный принцип работы кода
Здравия всем форумчанам =) История следующая. В ходе изучения python (третьего) была поставлена...

Неясный участок кода (точнее скобка)
Доброго времени суток! Я новичок как в JAVA так и платформе андроид и вот начал разбирать примеры и...

При выборке подстроки в конце появляеться неясный символ
такой вопрос - выбираю подстроку с помощью функции substr иногда (не понятно почему ) к концу новой...

2
2277 / 1768 / 741
Регистрация: 27.07.2012
Сообщений: 5,251
23.08.2016, 16:08 2
Передаётся не значение, а временный объект. По ссылке их передавать нельзя, но по константной ссылке - можно. Поэтому компилятор и не может выбрать, какую из двух перегрузок вызывать, ведь можно вызвать и ту и другую.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.08.2016, 16:10 3
В вызове may('B'); аргумент есть rvalue. Константная ссылка может быть связана с rvalue, т.е. подходит вторая версия функции. Но одновременно подходит и первая версия, т.к. rvalue может быть передано по значению. Если хочется избежать неоднозначности - можно убрать const. Обычная ссылка не может быть связана с rvalue, и будет вызвана первая версия.
0
23.08.2016, 16:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2016, 16:10
Помогаю со студенческими работами здесь

Неясный писк от газового котла Vaillant int 242/2-3
Уважаемые форумчане, Подскажите пожалуйста, такая вот ситуация, у меня дом стоит газовый котел...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using...

Вызов функции из другой функции и обратно. Общие переменные функций
Всем привет. Заранее напишу, что я ещё только изучаю программирование В данной программе...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель)
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru