Node * next 和 Node<T> * next 有什么区别?

1 c++ injected-class-name

我正在编写链表的实现

在下面的代码中,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;
    }
};
Run Code Online (Sandbox Code Playgroud)

Kar*_*yan 5

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

正如这里所述。

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

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

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

因此名称Node * next被解析为Node<T>* next;.