可能的重复: 模板中关键字' typename '和' class '的c++差异
在c++中定义函数模板或类模板时,可以这样写:
template <class T> ...
或者你可以这样写:
template <typename T> ...
有充分的理由选择其中一个而不是另一个吗?
我接受了最流行(也是最有趣)的答案,但真正的答案似乎是“不,没有充分的理由更喜欢其中一个而不是另一个。”
它们是等价的(除了下文所述)。 有些人总是使用typename是有原因的。 有些人总是有理由使用阶级。 有些人有理由两者都用。 有些人不在乎他们用的是哪一种。
但是请注意,在c++ 17之前,在模板模板形参的情况下,需要使用class而不是typename。请参阅下面user1428839的回答。(但这种特殊情况不是个人偏好的问题,而是语言的要求。)