gpt4 book ai didi

c++ - 为什么我们需要在 C++20 中的函数概念参数之后使用 auto?

转载 作者:行者123 更新时间:2023-12-04 11:58:25 25 4
gpt4 key购买 nike

我有以下编译错误,导致我无法理解。

template<typename T>
concept floating_point = std::is_floating_point_v<T>;

auto add(const floating_point f1, const floating_point f2)
{
return f1+f2;
}
在上面的版本中,编译器提示:
ssource>:6:16: error: expected 'auto' or 'decltype(auto)' after 'floating_point'
6 | auto add(const floating_point f1, const floating_point f2)
当我添加自动说明符时,一切都很好。
auto add(const floating_point auto f1, const floating_point auto f2)
{
return f1+f2;
}
这个很好用。
所以问题真的是为什么我们在这里需要 auto ? (签名对我来说似乎很奇怪)
第二个问题是返回类型有什么区别: floating_point auto add(..)对比 auto add(..)对于相同的功能? (两者都编译)

最佳答案

So the question really is why do we need auto here?


因为 floating_point不是类型,并且 add不是一个简单的函数。但是,类似 void add(floating_point, floating_point);完全看起来像一个普通的函数声明,这里没有任何东西告诉我们这实际上是一个 模板用简洁的语法编写。
委员会对代码中可能出现这种歧义感到不舒服。所以简洁的语法被修改为需要一个实际的类型占位符( auto ),概念可以绑定(bind)到它,而不是看起来像一个普通的声明。

The second question is what is the difference in return types


这些不是类型,那些是为某种类型推断的占位符。
这个概念唯一添加的是 add 中的 return 语句。必须返回通过概念检查的类型,否则推导将失败。

关于c++ - 为什么我们需要在 C++20 中的函数概念参数之后使用 auto?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68665410/

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