Почему так работает константная ссылка?

int main() {
    int a = 10;
    const long int &ref = a;
    a+=20;
    std::cout << ref;
}

Если написать, то вывод будет 10

int main() {
    int a = 10;
    const int &ref = a;
    a+=20;
    std::cout << ref;
}

А вот здесь уже вывод 30.

Причём если делать неконстантную ссылку другого типа, то появляется ошибка во время компиляции.

int main() {
    int a = 10;
    long int &ref = a;
    a+=20;
    std::cout << ref;
}

Можете пожалуйста объяснить, что здесь происходит.


Ответы (1 шт):

Автор решения: αλεχολυτ

Когда типы одинаковые (int, int), то модификация исходного объекта сказывается и на ссылочной переменной. А когда типы разные (int, long), то при использовании константной ссылки создаётся временный объект, который уже не связан с исходным объектом. Поэтому модификация исходного объекта уже не приводит к модификации того, куда указывает ссылка.

→ Ссылка