1

我正在编写链表的实现

在我们拥有的波纹管代码中Node<T> * next;Node * next; 我认为两者都与指向 Node 类的对象相同,或者它们之间存在差异。

template<typename T>
class Node{
    T data;
    Node<T>* next;
    Node * next;
    Node()
    {
        next = nullptr;
    }
    Node(T val)
    {
        this->data = val;
        next = nullptr;
    }
};
4

1 回答 1

5

如果两者都在类体内声明,则Node<T> * next;和之间没有区别。Node * next;

如此处所述。

在以下情况下,注入的类名被视为类模板本身的模板名:

  • 它后面是 <
  • 它用作对应于模板模板参数的模板参数
  • 它是友元类模板声明的详细类说明符中的最终标识符。

否则,它被视为类型名称,并且相当于模板名称后跟 <> 中包含的类模板的模板参数。

所以名称Node * next被解析为Node<T>* next;.

于 2021-09-22T15:11:37.887 回答