Const ссылки - C ++ - PullRequest
       36

Const ссылки - C ++

3 голосов
/ 07 августа 2011

У меня были сомнения относительно концепции константных ссылок в C ++.

int i =10;   
const int &j = i;  
cout<<"i="<<i<<" j:"<<j; // prints i:10 j:10

i = 20;
cout<<"i="<<i<<" j:"<<j;  // prints i:20 j:10 

Почему второй оператор j не выводит новое значение, т.е. 20.

Как это возможно, если ссылки на любую переменную означают сильную связь между ними.

Ответы [ 4 ]

6 голосов
/ 07 августа 2011

Это ошибка компилятора. Код должен напечатать 20 20.

4 голосов
/ 07 августа 2011

Я не вижу причин, по которым j не напечатает 20 во втором cout.

Я запустил этот код:

int main() {
        int i =10;   
        const int &j = i;  
        cout<<"i="<<i<<" j:"<<j << endl; // prints i:10 j:10

        i = 20;
        cout<<"i="<<i<<" j:"<<j << endl;  // prints i:20 j:10 
        return 0;
}

И он дал мне такой вывод:

i=10 j:10
i=20 j:20

Посмотрите онлайн-демонстрацию самостоятельно: http://ideone.com/ELbNa

Это означает, что либо у компилятора, с которым вы работаете, есть ошибка (что является менее вероятным случаем, потому что это самая базовая вещь в C ++), либо вы неправильно видели вывод (что, скорее всего, имеет место).

3 голосов
/ 07 августа 2011

const reference означает, что не может изменить значение рефранта.Тем не менее, референт может изменить свое значение, что, в свою очередь, влияет на ссылку.Я не знаю, почему вы получаете результат, который вы показали.

Это на самом деле меняется, и вы увидите результат здесь.

0 голосов
/ 09 июня 2016

Просто чтобы добавить еще одну точку, ссылка const не требует lvalue для ее инициализации. Например

int &r = 10;            //ERROR: lvalue required
const int &cr = 10;     //OK
...