Я знаю, что это относится к ОСНОВАМ, но программисты во всем мире неправильно понимали его на протяжении десятилетий. Это моя попытка прояснить это.
- Ссылки — это псевдонимы для существующей переменной. Если мы скомпилируем код, мы не получим 2 переменные. ссылка существует только в нашем исходном коде.
- Ссылка - это именно то, на что это похоже. Это способ сослаться на «существующую переменную», в отличие от указателей, которым можно присвоить значение null. Ссылки всегда должны ссылаться на что-то. И, следовательно, нам не нужно проверять ссылки.
char& ref; //error - references must be initialized char* p0; //allowed. No errors.
- Ссылки не нуждаются в хранении (поскольку это просто никнейм). Они НЕ похожи на вашу типичную переменную.
int a = 5 int *b = &a; //creating a pointer. //Using & to look at the memory address. int& ref = a; //this and previous lines are actually different. //& is used in both cases, however their usage is different. //int& is a type.
- Как только вы объявите ссылку, вы не сможете изменить то, на что она ссылается.
int c = 2; ref = c; //this will actually set the value of a to 2, and WON'T create a reference to c, as ref already refers a.
Когда использовать ссылку?
- Используйте ссылку: когда вы знаете, что всегда будет объект, на который можно сослаться, и вы никогда не захотите ссылаться ни на что другое. Подходит для параметров функций и типов возвращаемых значений (делает вид чище).
void increment(int* a){ if(a){ (*a)++; } } //pointers need validation. //Hence the 'if' statement. void increment(int& a){ a++; } //no need to validate references. //They will always refer to something. //both the above functions do the same thing. //They increment a. 2nd one looks a lot cleaner.
Надеюсь, это прояснит ситуацию!