在C++中声明模板参数时,typename和class有什么区别?
你好!我是一名初学C++的开发者,正在尝试理解模板。我注意到在声明模板参数时,既可以使用关键字`typename`,也可以使用`class`。例如:
```cpp
template
void foo(T t) { }
template
void bar(T t) { }
```
两种写法都能编译且运行结果相同。这让我感到困惑。为什么需要两个不同的关键字来实现同一个目的?它们之间有任何区别吗?我听说在某些上下文中,比如处理嵌套依赖类型时,`typename`是必需的,而`class`不适用。这是真的吗?还是说这只是历史遗留问题?请详细解释一下,让我最终明白何时该用哪个。非常欢迎提供代码示例。提前感谢!
<<>>
简短回答:历史原因,但有一些重要细节
实际上,在99%的情况下,声明模板参数(template parameter)时,关键字type