我一直在尝试通过浏览一些项目来理解c ++,我遇到了这个:
vector<Circle>::iterator circleIt = mCircles.end();
..
mCurrentDragCircle = &(*circleIt);
Run Code Online (Sandbox Code Playgroud)
你为什么要取消引用然后再引用它?
本*-运算符重载的iterator类.它没有做一个简单的解引用.相反,它返回对当前指向的变量的引用.在此处使用引用运算符将返回指向变量的指针.
使用mCurrentDragCircle = circleIt;会将迭代器分配给您的字段.
circleIt是一个迭代器,迭代器重载,operator*使它们看起来像指针.取消引用迭代器可以引用该值; &把它变成指向值的指针.所以这是将迭代器转换为指针.
顺便说一句,取消引用过去的结果,即*v.end()具有未定义的行为.正确的方法是
v.data() + v.size()
Run Code Online (Sandbox Code Playgroud)
在C++ 11中,或
&v[0] + v.size()
Run Code Online (Sandbox Code Playgroud)
在C++ 98中.两者都假设向量是非空的.