c – 迭代单个左值
我想将一个左值传递给一个需要一对迭代器的函数,并且它就像我将一对迭代器传递给只包含这个值的范围一样.
我的方法如下: #include <iostream> #include <vector> template<typename Iter> void iterate_over(Iter begin,Iter end){ for(auto i = begin; i != end; ++i){ std::cout << *i << std::endl; } } int main(){ std::vector<int> a{1,2,3,4}; iterate_over(a.cbegin(),a.cend()); int b = 5; iterate_over(&b,std::next(&b)); } 这似乎在g 5.2中正常工作,但我想知道这是否是实际定义的行为以及是否存在任何潜在问题? 解决方法
是的,这是定义的行为.首先我们来自[expr.add] / 4
因此,单个对象被视为长度为1的数组.然后我们有[expr.add] / 5
强调我的 因此,由于第一个数组元素也是最后一个数组元素,并且向最后一个数组元素添加1会为您提供一个超过该对象的元素,这是合法的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |