结合&和*运算符

use*_*106 10 c++ reference class linked-list operators

我一直在阅读使用类的List(及其节点)的实现,我发现了一些我不太了解的事情.这是我不理解的Node类中的代码:

    class Node {
      private:
         Data data;
         Node* next;
      public:
         Node*& getNext();
    };

    Node*& Node::getNext()
    {
       return this->next;
    }
Run Code Online (Sandbox Code Playgroud)

什么是*&确切?我不知道该方法返回什么样的变量.

我想我现在得到它,后来我有这些行(在类List中):

Node** node = &first;
node = &(*node)->getNext();       
Run Code Online (Sandbox Code Playgroud)

这是否意味着我在节点*中存储下一个地址?

注:评论中回答了第二个问题.谢谢你的回复.

Luc*_*ore 9

这是对指针的引用.这意味着Node*函数返回的是别名Node::next.

例如,假设你有:

Node n;
n.getNext() = NULL;
Run Code Online (Sandbox Code Playgroud)

这设置n.nextNULL.

如果该方法没有通过引用返回

Node* Node::getNext()  //no reference
{
   return this->next;
}
Run Code Online (Sandbox Code Playgroud)

相同的代码

Node n;
n.getNext() = NULL;
Run Code Online (Sandbox Code Playgroud)

不会 修改n.next- 在这种情况下,它将保持未初始化状态编译,因为getNextrvalue这里返回.

或者,通过引用返回:

Node*& x = n.getNext();
x = new Node;
Run Code Online (Sandbox Code Playgroud)

将修改n.next,作为x参考n.next.