“&安培;”并通过参考传递

时间:2013-11-20 16:58:58

标签: c++ data-structures binary-tree binary-search-tree

我在二叉搜索树中有一个函数,它返回特定节点的地址:

binary_tree_node*& left( ) { return left_field; }

我注意到“&”表示传递left_field的地址。 如果我删除了“&”,是否意味着当我使用下面的函数时会引入编译器错误?

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

3 个答案:

答案 0 :(得分:3)

  

我注意到“&amp;”传递left_field的地址

在这种情况下“&amp;”意思是“参考”而不是“地址”

因此,您将返回指针的引用,而不是指针的地址。

如果没有“&amp;”,这行就无法编译:

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

因为你要为临时指针赋值(left()函数的返回)。如果您使用引用,则返回的指针是您类中的指针。

答案 1 :(得分:0)

是的,会出现编译器错误,因为返回对象是rvalue。但如果我没弄错,MS VC ++(至少是MS VC ++ 2010)会编译它,因为编译器有错误。

答案 2 :(得分:0)

首先尝试正确阅读:

T *&

从右到左阅读,它是指向T类型对象的指针。

因此,该函数返回对binary_tree_node指针的引用。返回引用的函数可以放在赋值的左侧,您可以更改引用对象的值。该行引导作为指针的引用对象指向新构造的对象:

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