2014-01-20 3 views
6

Недавно C++ эксперт сказал мне, что:Функция Передавать по ссылке

void f(int &*r); 

действительный пропуск на контрольном примере, хотя я думал, что это какое-то указатель на ссылку, которая является незаконной. Из моего знания правильной формы для прохода по ссылке либо форма следующее:

void f1(int *&r); 
void f2(int &r); 

Можете ли вы объяснить ситуацию первого примера (функция ф)?

+2

Ваш "эксперт" был смущен , – juanchopanza

+0

Я не уверен, но 'int * & r' его ссылка на указатель,' int & r' int ссылается на int, никогда не видел 'int & * r' ... – Netwave

+5

Этот человек сказал вам, что они были экспертом , или вы сами назначили им роль? –

ответ

8

Первый (указатель к ссылке) является незаконным во всех версиях C++. Остальные два: legal.

Линия: Игнорируйте своего инструктора — он/она не знает C++, по крайней мере, в этом случае.

3

Его не допускается,

от стандарта C++ 8.3.2/5:

There shall be no references to references, no arrays of references, and no pointers to references.

, а также он не компилируется, г ++ выходы:

error: cannot declare pointer to 'int&'

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