Why C++17 have two keywords(class and typename) for the same purpose in templates
Template template parameter declaration can only use the keyword class
and not typename until C++17.
这就是C++17之间的区别,因为C++ 17,两者是相同的。
那么为什么C++ 17不舍弃模板参数和类型参数声明中的关键字(类)中的一个呢?
因为阶级有两个不同的含义
- 这两个关键字的用途不同。有些情况下你可以互换使用它们,但有些情况下你不能。
- 自从static被否决后?
- 实际上,static是不可预测的。
- @ DeavangFeNe:"EDCOX1"2。当在命名空间范围内声明对象时,使用静态关键字(参见3.3.5)。
- @轻量赛马Sinorbit,但这不是关键字的全部目的…
- C++17令人困惑的主要原因是C++ 17是一种特殊情况的集合,就像微软软件一样。C++ 11有很好的改进。C++ 14的一些UPS,可惜也有很多C++ 17喜欢的东西。
- @Deviantfan:我很清楚,这个词指的是不赞成使用的static的具体含义。如果他们没有,他们现在已经被纠正了,所以我们可以继续前进。
- @例如,您可以使用class来声明用户定义的类型。你不能用typename来做这个。
这是一个主观问题。就我个人而言,我倾向于同意在这里使用class是一种糟糕的形式,而typename应该是唯一允许使用的关键字。
但这只是我的意见。也许这种使用class的做法在将来会被否决;也许有足够多的人愿意写class,不管出于什么原因,这是不可能的。
在一天结束的时候,这不是影响C++的最紧迫的问题,这可能是委员会最终放宽限制而不是增加新的限制的真正原因。
如果您强烈认为应该反对使用class,请向工作组提出建议!
顺便说一下,在C++ 11中实际上不使用EDCOX1 5的引用。
- @smartmanoj:这意味着这个东西不再被否决了。