gpt4 book ai didi

c++ - 为什么 auto 不允许作为函数参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:24 24 4
gpt4 key购买 nike

来自 this question , 显然 auto 不能用作函数参数。我的问题是为什么允许返回类型为 auto 但函数参数不是?

auto function(auto data)
{
//DOES something
}

因为,there autoc++1z 中有很多好处,那为什么不呢?

最佳答案

此语法是在 Concepts TS 中提出的,但并未将其纳入 C++17 for various reasons .

尽管我在下面概述了一些批评,但它已添加到 C++20 中。


注意:通过将 P1141R2 合并到标准中,答案的以下部分已过时。我会把它留在这里供引用。

然而,即使我们最终在下一次迭代(可能是 C++20)中获得概念,也不清楚所需的语法是否会使其成为标准。在 this paper , Richard Smith 和 James Dennett 批评所谓的“简洁模板符号”,说

The Concepts TS introduces too many syntaxes for a function template declaration. Some of those syntaxes have no clear, consistent syntactic marker for templates, which is important semantic information for the reader of the code (remembering that code is read vastly more than it is written).

他们继续提出不同的语法来实现目标,同时使模板声明更加一致:

=> Require an explicit sigil to declare a function to be a template

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) {}

The ​...​ sigil in the ​template-parameter-list indicates that additional template parameters will be inferred from the declaration.

所以 Tl;dr:有很多与标准化程序相关的原因导致我们在 C++17 中没有它,还有更多的原因我们可能不会永远得到它。如果我对这篇论文的理解正确的话,关键是每个模板都应该用 template 关键字引入。

关于c++ - 为什么 auto 不允许作为函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45632953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com