«&» И передать по ссылке

0

У меня есть функция в двоичном дереве поиска, который возвращает адрес определенного узла:

binary_tree_node*& left( ) { return left_field; }

Я отмечаю, что "&" означает передать адрес поля left_field. Если я удалил "&", означает ли это, что он представит ошибку компилятора, когда я использую функцию ниже?

root->left()=new binary_tree_node<ItemType>(9);
  • 0
    Мне интересно, где в вашем коде вы назначаете root->left() ? Если это не внутри метода класса, вы можете пересмотреть свой дизайн, чтобы иметь лучшую инкапсуляцию. Если это внутри метода класса, почему бы просто не присвоить left_field ?
  • 0
    Код строки 1, которую я написал, находится в заголовочном файле. Назначение находится в другом файле реализации, а left_field является частной переменной.
Показать ещё 1 комментарий
Теги:
data-structures
binary-search-tree
binary-tree

3 ответа

3
Лучший ответ

Я отмечаю, что "&" означает передать адрес поля left_field

В этом случае "&" означает "ссылка", а не "адрес",

Таким образом, вы возвращаете ссылку на указатель, а не на адрес указателя.

Эта строка не будет компилироваться без "&":

root->left()=new binary_tree_node<ItemType>(9);

потому что вы назначаете значение временному указателю (возврат функции left()). Хотя, если вы используете ссылку, возвращаемый указатель находится внутри вашего класса.

0

Сначала попробуйте прочитать его правильно:

T *&

Прочтите его справа налево, это ссылка на указатель на объект типа T

Таким образом, эта функция возвращает ссылку на указатель binary_tree_node. Функция, которая возвращает ссылку, может быть помещена в левую часть задания, и вы можете изменить значение объекта, на который ссылается. Эта строка ведет ссылочный объект, который является указателем, указывает на вновь построенный объект:

root->left() = new binary_tree_node<ItemType>(9);
0

Да, будет ошибка компилятора, потому что возвращаемый объект имеет значение rvalue. Но если я не ошибаюсь, то MS VC++ (по крайней мере MS VC++ 2010) скомпилирует его, потому что у компилятора thsi есть ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню