x =&(*变量)与x =变量有什么不同?

Dal*_*upe 1 c++ pointers

我一直在尝试通过浏览一些项目来理解c ++,我遇到了这个:

vector<Circle>::iterator circleIt = mCircles.end();
..
mCurrentDragCircle = &(*circleIt);
Run Code Online (Sandbox Code Playgroud)

你为什么要取消引用然后再引用它?

Nim*_*ian 6

*-运算符重载的iterator类.它没有做一个简单的解引用.相反,它返回对当前指向的变量的引用.在此处使用引用运算符将​​返回指向变量的指针.

使用mCurrentDragCircle = circleIt;会将迭代器分配给您的字段.


Fre*_*Foo 5

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中.两者都假设向量是非空的.

  • @Daloupe:也许`//操纵circleIt所以不是结束()`? (2认同)