首页 > 解决方案 > 为什么从 C++ 20 开始,基于范围的 for 循环错误消息仍然不是很好?

问题描述

在 C++20 中,添加了概念,因此也添加了受约束的算法,例如std::ranges::for_each.

为什么基于范围的 for 循环错误消息具有以下简单错误:

为什么不只是:

它仍然会使一些初学者感到困惑,也许只是创建一个特定的概念名称(隐藏),这样他们就会得到缺少的东西。

在结构化绑定编译器错误中,消息非常清楚。

解决这个问题是编译器的责任还是标准委员会的责任?

标签: c++range-based-loop

解决方案


std::ranges::for_each是新功能,它使用 C++20 概念。常规的“基于范围的 for 循环”不是一个函数,它早于 C++20 概念(它是在 C++11 中添加的),因此它不使用概念。标准委员会可以根据一些标准概念而不是函数来修改基于范围的 for 循环的begin定义end

我不知道这是否会发生,考虑到这不是一个巨大的改进,标准化工作可以更有效地用于其他地方。


推荐阅读