我正在实现一个遍历生成器函数结果而不是内存中数据结构(例如向量或映射)的迭代器。

通读C++17的最终工作草案 §27.2.3,对于输入迭代器(以及大多数其他迭代器)前向迭代器的解引用运算符的返回类型必须是引用。这对于存在于迭代器正在遍历的数据结构中的项目来说是可以的。然而,由于我没有使用数据结构并且在调用解引用运算符时计算每个项目,因此我没有有效的引用可供返回;当运算符返回时,计算出的项目将被销毁。为了解决这个问题,我将计算结果存储在迭代器本身中,并返回对存储结果的引用。对于我的用例来说,这很好用,但是与任意用户定义类型一起使用时会有自己的问题。

我可以理解迭代器允许返回引用,但为什么非变异迭代器要求返回引用呢?标准的撰写者没有考虑生成器和即时转换是迭代器的有效用例吗?返回值而不是const引用会造成任何实际伤害吗?

[编辑]:我更多地是出于对标准撰写方式的好奇,因为我已经有了完全可行的解决方法。