【发布时间】:2021-07-02 11:42:37
【问题描述】:
template<class T>
struct E{}; //// no error
template<struct T>
struct F{}; ////error
错误:非类型模板参数不能具有类型“struct T” 模板
如果除了默认的private 和public 访问说明符之外class 和struct 是相同的东西,那么为什么这不起作用?
【问题讨论】:
-
模板参数可以使用
class或typename。不是class或struct。 C++ 通常具有在不同上下文中以不同方式使用的关键字。用例就是这样一种不同的上下文。 -
你把这句话断章取义了。正确的上下文是当它们用于类定义时。
-
“因为标准是这样说的”(tm)
-
我通常对差异的陈述是“您可能看到的唯一差异是
class默认为private访问权限,struct默认为public访问权限。”我已经看到了一些语言律师就 C++11 中的几个边缘案例进行的争论,我认为只有编译器编写者和那些解决非常有趣的问题的人才会关心这些案例。在随后的修订中,措辞可能已被清理干净。我不是在编写编译器或解决非常有趣的问题,所以我从来没有比较过他们争论的措辞。 -
有人告诉 LightningRacesInOrbit 吗?他始终坚持 C++ 中只有类。
标签: c++ class templates struct