Поиск…


Определение ссылки

Ссылки ведут себя аналогично, но не совсем как константные указатели. Ссылка определяется путем суффикса амперсанда & имени типа.

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;

Потому что псевдоним не имеет никакого отношения ни к чему.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow