C++
Рекомендации
Поиск…
Определение ссылки
Ссылки ведут себя аналогично, но не совсем как константные указатели. Ссылка определяется путем суффикса амперсанда &
имени типа.
int i = 10;
int &refi = i;
Здесь refi
является ссылкой, связанной с i
.
Ссылки абстрагируют семантику указателей, действуя как псевдоним основного объекта:
refi = 20; // i = 20;
Вы также можете определить несколько ссылок в одном определении:
int i = 10, j = 20;
int &refi = i, &refj = j;
// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!
Ссылки должны быть правильно инициализированы во время определения и впоследствии не могут быть изменены. Следующий фрагмент кода вызывает ошибку компиляции:
int &i; // error: declaration of reference variable 'i' requires an initializer
Вы также не можете напрямую привязать ссылку к nullptr
, в отличие от указателей:
int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'
Ссылки на C ++ - это псевдоним существующих переменных
Ссылка в C ++ - это просто Alias
или другое имя переменной. Так же, как и большинство из нас может быть передано с использованием нашего имени паспорта и псевдонима.
Ссылки не существуют буквально, и они не занимают никакой памяти. Если мы напечатаем адрес ссылочной переменной, он напечатает тот же адрес, что и адрес переменной, на которую ссылается.
int main() {
int i = 10;
int &j = i;
cout<<&i<<endl;
cout<<&b<<endl;
return 0;
}
В приведенном выше примере оба cout
будут печатать один и тот же адрес. Ситуация будет такой же, если мы возьмем переменную в качестве ссылки в функции
void func (int &fParam ) {
cout<<"Address inside function => "<<fParam<<endl;
}
int main() {
int i = 10;
cout<<"Address inside Main => "<<&i<<endl;
func(i);
return 0;
}
В этом примере оба cout
будут печатать тот же адрес.
Поскольку мы знаем, что C++ References
- это просто псевдоним, и для создания псевдонима нам нужно иметь то, к чему может относиться псевдоним.
Это точная причина, по которой такой оператор выдает ошибку компилятора
int &i;
Потому что псевдоним не имеет никакого отношения ни к чему.