Мы знаем, что в C ++ мы можем инициализировать ссылку с объектом / переменной типа, на который ссылается ссылка.Например, мы можем использовать переменную int для инициализации ссылки на int:
int i;
int& r=i;
Но ситуация становится запутанной, когда речь идет о ссылке на указатель.Предположим, мне нужно определить ссылку на указатель:
int* & r
Чтобы инициализировать его, нам нужно присвоить r
указатель на int.Следующий код работает (продолжайте с приведенным выше кодом):
int* p = &i;
int* & r = p;
Но следующий код вызывает ошибку компиляции, даже если правая часть = действительно является указателем на int:
int* & r = &i;
Сообщение об ошибке:
'initializing': невозможно преобразовать из 'int *' в 'int * &'.
Почему?Почему компилятор может конвертировать из int
в int&
, но не может конвертировать из int *
в int *&
?Почему я могу инициализировать с p
, но не с &i
?Разве они не одинаковы?
PS: Я использую Visual Studio 2015 для Windows.