C++模板类中Node * next与Node<T> * next的区别是什么?
问题解答
在你给出的Node类模板的定义范围内,Node<T>* next;和Node* next;两种写法完全等价,没有任何功能差异。
核心原因
C++标准有明确规定:在类模板自身的作用域中(也就是类声明的大括号包裹范围,以及类内直接定义的成员函数的作用域中),模板的名称(此处为Node)会被自动隐式推导为当前实例化的完整类型Node<T>,不需要开发者显式指定模板参数。
你给出的示例代码中同时写两个next指针的声明会直接触发编译报错,本质原因就是二者实际指向的类型完全一致,属于重复定义了同名成员变量。
需要显式写全Node<T>的场景
只有当代码处于类模板的作用域之外时,才需要显式指定模板参数,常见场景如下:
- 在类外部定义类模板的成员函数:
template<typename T> Node<T>::Node(T val) { this->data = val; next = nullptr; }
- 在其他不属于
Node类模板成员的代码中,声明Node类型的指针或变量时。
内容的提问来源于stack exchange,提问作者Mcsf19a019-Shoaib Sabir
相关产品推荐
相关产品推荐

