From 这个问题, 很清楚auto
不能用作函数参数。我的问题是为什么返回类型被允许为auto
但函数参数不是?
auto function(auto data)
{
//DOES something
}
Since, there有很多好处auto
进来c++1z,那为什么不呢?
此语法是在 Concepts TS 中提出的,但并未纳入 C++17很多原因.
尽管我在下面概述了一些批评,但它已添加到 C++20 中。
注意:通过将 P1141R2 合并到标准中,答案的以下部分已过时。我将其留在这里供参考。
然而,即使我们最终在下一次迭代(可能是 C++20)中获得概念,也不清楚所需的语法是否会使其成为标准。在这张纸、理查德·史密斯和詹姆斯·丹尼特批评所谓的“简洁的模板符号”, saying
Concepts TS 为函数模板声明引入了太多语法。其中一些语法没有清晰、一致的模板语法标记,这对于代码读者来说是重要的语义信息(请记住,代码的读取次数远远多于编写的次数)。
他们继续提出不同的语法来实现目标,同时保持模板声明更加一致:
=> 需要一个显式的标志来将函数声明为模板
Replace
void f(auto a) {}
template<typename T> void g(auto a) {}
with
template<...> void f(auto a) {}
template<typename T, ...> void g(auto a) {}
...中的印记模板参数列表表明
将从声明中推断出其他模板参数。
So Tl;dr:有很多与标准化过程相关的原因导致我们在 C++17 中没有它,而且还有更多原因导致我们可能永远不会得到它。如果我正确理解这篇论文,关键点是每个模板都应该用一个template
关键词。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)