我在二叉搜索树中有一个函数,它返回特定节点的地址:
binary_tree_node*& left( ) { return left_field; }
我注意到“&”表示传递left_field的地址。 如果我删除了“&”,是否意味着当我使用下面的函数时会引入编译器错误?
root->left()=new binary_tree_node<ItemType>(9);
答案 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);