2015-10-19 2 views
-1

Я знаю, что мне не разрешено писать long& const x. Но почему нет? Теоретически я мог бы постоянно ссылаться на x. Я просто не смог бы установить ссылку на другой адрес.Почему в C++ нет постоянных ссылок?

Почему это запрещено на C++?

Редактировать: Я знаю, что есть что-то, чего я не понимаю, но я могу назначить ссылку на другую переменную. Этот фрагмент кода работает:

#include <iostream> 

int main() 
{ 
int a = 1, b = 2; 
int & x = a; 
x = b; 
return 0; 
} 

Но это противоречит тому, что вы делаете.

+7

Вам не хватает того, что ссылки всегда постоянны? –

+2

Ссылка на константу объявляется следующим образом: 'const long & x' –

+0

*", но я могу назначить ссылку на другую переменную * * - no вы не можете; то, что на самом деле делает ваш код, это переместить значение 'b' в' a', а не переустанавливать ссылку. Помните, что - как ссылка - 'x' является формой псевдонима для' a', поэтому все, что вы делаете с ним, прозрачно влияет на 'a' - включая назначение. 'x' может *** не изменяться *** для обращения к другому объекту. –

ответ

6

Рекомендации всегда постоянные.

Вы не можете переназначить их для ссылки на другую переменную после инициализации, и вы всегда должны инициализировать их для ссылки на переменную.

В вашем примере, код не делает то, что вы думаете, это:

x = b; не переназначить x обратиться к b, он присваивает значение b переменной, которая x ссылается, т.е. a.

Ссылка только псевдоним, другое имя, для переменной. Это означает, что вы можете заменить каждый экземпляр x на a, и поведение будет таким же.

+0

Спасибо, это то, что я искал! – user2738748

3

Я просто не смог бы установить ссылку на другой адрес.

Вы уже не можете.

Ссылки неизменяемы. Добавление const не сделает их более «неизменными».

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

В частности, это приведет к тому, что люди думают, что ссылки - это объекты, которых они не являются. Ссылки не являются указателями под другим видом. Это ссылки; псевдонимы для другого объекта. И имена не могут быть const.

Я могу назначить ссылку на другую переменную.

Нет, вы не можете.

Это противоречие с тем, что вы являетесь.

Нет, это вы неправильно понимаете свой собственный код. С x = b вы устанавливаете a в 2.

Смежные вопросы