【问题标题】:Why C++17 have two keywords(class and typename) for the same purpose in templates为什么 C++17 在模板中有两个用于相同目的的关键字(class 和 typename)
【发布时间】:2016-10-15 11:56:12
【问题描述】:

模板模板参数声明只能使用关键字class 并且在 C++17 之前没有 typename。

这是 C++17 之前的区别。从 C++17 开始,两者都是相同的。

那为什么 C++17 不弃用模板参数和类型参数声明中的关键字(类)之一呢?

因为类有两种不同的含义

【问题讨论】:

  • 这两个关键字的用途不同。在某些情况下可以互换使用它们,但在其他情况下则不能。
  • 从什么时候开始不推荐使用static
  • 实际上,static 已被弃用。
  • @deviantfan: "[C++03: D.2/1]: 在命名空间范围内声明对象时不推荐使用 static 关键字(参见 3.3.5)。" 这在 C+ 中被颠倒了+11。
  • @deviantfan:我很清楚,OP 指的是 static 的具体含义,被弃用。而且,如果它们不是,它们现在已经得到纠正,所以我们可以继续前进。

标签: c++ class c++17


【解决方案1】:

这是一个主观问题。我个人倾向于同意 class 在这里 根本 是糟糕的形式,typename 应该是唯一允许的关键字。

但这只是我的意见。也许class 的这种用法将来会被弃用;也许有足够多的人喜欢写class,无论出于何种原因,它都不会。

归根结底,影响 C++ 的问题几乎不是最紧迫的问题,这可能是委员会最终放宽限制而不是添加新限制的真正原因。

如果您强烈认为应该弃用 class 的这种用法,请随时向工作组提出此建议!

顺便说一句,你提到的static的用法实际上在C++11中是不被推荐的。

【讨论】:

  • @SmartManoj:这意味着这个东西不再被弃用了。
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多