Страницы

Поиск по вопросам

четверг, 18 октября 2018 г.

Const модификатор в сигнатуре функции

Добрый день,
#include using namespace std;
void f_num(int x) { cout << "int x" << endl; } void f_num(const int x) { cout << "const int x" << endl; }
void f_ptr(int* x) { cout << "int* x" << endl; } void f_ptr(const int* x) { cout << "const int* x" << endl; }
int main() { int* pointer = (int*)15; const int* pointer2 = (int*)15;
int number = 0; const int number2 = 15;
f_num(number); f_num(number2);
f_ptr(pointer); f_ptr(pointer2); }
Почему для указателей допустима перегрузка через модификатор параметра const, а для объекта по значению нет.


Ответ

В данном случае для компилятор просто воспринимает идентичными
void f_num(int x); void f_num(const int x);
потому что на самом деле при таком вызове создается копия передаваемой переменной, и компилятору без разницы создавать её из const или не const переменной, он просто не сможет определить какую конкретно функцию вызывать. Вы можете передавать переменную по ссылке (не создавая копию), тогда сработает:
void f_num(int &x); void f_num(const int &x);

Комментариев нет:

Отправить комментарий