Разница между ссылкой на константу и ссылкой
void setage(const int&a);
void setage(int&a);
В чем разница между этими двумя функциями? Когда вызывается эта функция?
2 ответа
Учитывая набор перегрузки:
void setage(int&a) { std::cout << "&"; }
void setage(const int&a) { std::cout << "&c"; }
первая функция вызывается только с переменными, которые не являются константными:
int a = 42;
setage(a); // prints &
Вторая функция вызывается, если вы передаете ей переменную, которая является константой, или если вы передаете ей буквальное значение:
int const b = 42;
setage(b); // prints c&
setage(42); // prints c&
Обратите внимание, что если этот набор перегрузки записан внутри класса, применяются те же правила, и то, какая функция вызывается, по-прежнему зависит от того, является ли переданный аргумент буквальной, неконстантной переменной или константной переменной.
В const
просто означает, что функция не изменит значение. При передаче по ссылке часто предпочтительнее передавать по постоянной ссылке, если только функция не должна изменять параметр.
Что касается того, какая функция вызывается, это будет зависеть от типа переменной. См. Пример ниже.
int a( const int &b ) { return b; }
int a( int &b ) { return ++b; }
int main() {
int x = 2;
a( x ); // calls a( int & b )
a( 5 ); // calls a( const int &b )
const int y = 7;
a( y ); // calls a( const int &b )
}
Обратите внимание, что буквальные значения (например, 5
в приведенном выше примере) не может быть привязан к не-const
Ссылки.