2016-04-11 6 views
2

Я пробовал искать ответ, но пока не повезло. Мой вопрос: зачем нужно указывать опорные переменные, когда они определены? Это техническая причина, или это то, что стандарт не позволяет?Почему ссылочные переменные должны быть инициализированы при определении?

Возьмите этот код, например:

int number = 42; 
int& numberRef; 
numberRef = number; 

Выше не допускается, но код ниже:

int number = 42; 
int& numberRef = number; 

Почему компилятор не может обработать неинициализированный ссылочную переменную как неинициализированная указатель? Здесь что-то не хватает?

+1

ссылка не может быть отбой: есть синтаксическая-семантическая двусмысленность, и она решена путем определения, что присваивание ссылки на самом деле означает присваивание сосланного объект, причем инициализация ссылки просто связывает ссылку на связанный объект. –

+0

Если бы были неинициализированные ссылки, зачем они нужны нам вообще? У нас есть указатели. – Drop

+1

@Drop, чтобы избежать необходимости писать '->' в нашем коде :) – Chiel

ответ

8

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

int& numberRef;  // pretend this is allowed 
numberRef = number; // copies number into some random memory location 
+0

А, я переусердствовал ... еще раз. –

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