【发布时间】:2021-08-05 11:06:43
【问题描述】:
我有以下编译错误,导致我无法理解。
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(..) 是否具有相同的功能? (都编译)
【问题讨论】:
-
可能通过避免类型和概念之间的歧义来提高可读性(和/或使实现更容易)。