🖥 Чем отличаются ссылки от указателей в С++



В чем принципиальное отличие ссылки от указателя в С++? Какие ограничения есть у первых, а какие у вторых?



Вот некоторые из отличий::

🔘Нельзя объявить массив ссылок.

🔘У ссылки нет адреса.

🔘Существует арифметика указателей, но нет арифметики ссылок.

🔘Указатель может иметь «невалидное» значение с которым его можно сравнить перед использованием.



🔘Если вызывающая сторона не может не передать ссылку, то указатель может иметь специальное значение nullptr:

void f(int* num, int& num2)

{

if(num != nullptr) // if nullptr ignored algorithm

{

}

// can't check num2 on need to use or not

}




🔘Ссылка не обладает квалификатором const

#include <iostream>

int main()

{

std::cout << "Hello, world!\n";



const int v = 10;

//int& const r = v; // Ошибка

const int& r = v;



enum

{

is_const = std::is_const<decltype(r)>::value

};



if(!is_const)

std::cout << "const int& r is not const\n";

else

std::cout << "const int& r is const\n";

}




@cpluspluc