C++20中,前向范围的哨位类型是否保证与迭代器类型相同?
问题解答
不一定。
前向迭代器要求“自身可作为哨位使用”,核心意思是迭代器类型的对象可以当作哨位来用——也就是说,同类型的迭代器之间能正确做相等/不等比较,而且这些比较要满足前向迭代器的语义规则(比如相等性有传递性,迭代器递增后不会再和之前的结束哨位相等)。但这完全不代表范围的end()必须返回和迭代器一模一样的类型。
实际场景中,只要哨位类型能和迭代器类型合法地进行==、!=比较,并且比较逻辑符合前向迭代器的语义要求,这种不同类型的哨位是被允许的。比如你可以自定义一个前向范围:迭代器负责逐个遍历元素,而end()返回一个专门的标记结构体,当迭代器遍历到最后一个元素的下一个位置时,和这个哨位比较会返回true——只要这个比较逻辑是正确的,就完全符合前向范围的要求。
内容的提问来源于stack exchange,提问作者ABu
相关产品推荐
相关产品推荐

