c++ - 为什么从 C++ 20 开始,基于范围的 for 循环错误消息仍然不是很好?
问题描述
在 C++20 中,添加了概念,因此也添加了受约束的算法,例如std::ranges::for_each
.
为什么基于范围的 for 循环错误消息具有以下简单错误:
begin
并且end
没有在范围内声明。
为什么不只是:
- 给定的表达式不满足
std::ranges::range
它仍然会使一些初学者感到困惑,也许只是创建一个特定的概念名称(隐藏),这样他们就会得到缺少的东西。
在结构化绑定编译器错误中,消息非常清楚。
解决这个问题是编译器的责任还是标准委员会的责任?
解决方案
std::ranges::for_each
是新功能,它使用 C++20 概念。常规的“基于范围的 for 循环”不是一个函数,它早于 C++20 概念(它是在 C++11 中添加的),因此它不使用概念。标准委员会可以根据一些标准概念而不是函数来修改基于范围的 for 循环的begin
定义end
。
我不知道这是否会发生,考虑到这不是一个巨大的改进,标准化工作可以更有效地用于其他地方。
推荐阅读
- nginx - Nginx 配置错误
- javascript - 拼接不适用于 DOM 元素数组
- javascript - 错误和删除错误时的可访问性问题
- laravel - 多态关系laravel问题与视图
- azure - 如何设置对 Azure 应用服务的 FTP 访问?
- node.js - 当我尝试保存到 Firestore 时,为什么我的 Firebase HTTPS 功能会静默?
- javascript - 如何让 IonViewDidLoad 在事件订阅之后运行
- python - Django - 通知迁移不一致迁移历史
- .net - 在批处理文件中区分 COM dll 和 .NET 程序集
- mysql - MySQL 十进制列 SUM