gpt4 book ai didi

C++ 迭代器运算符优先级问题 *it.method() vs (*it).method() vs it->method()

转载 作者:太空狗 更新时间:2023-10-29 23:45:35 28 4
gpt4 key购买 nike

这段代码无法编译:

for(vector<Box>::iterator it = shapes.end(); it >= shapes.begin(); --it){
*it.update(1,1);
*it.draw();
}

它声称:

main.cpp:80:17: error: ‘std::vector<Box>::iterator’ has no member named ‘update’
main.cpp:81:17: error: ‘std::vector<Box>::iterator’ has no member named ‘draw’

但是 AFAIK,该代码不会尝试调用 vector::iterator.draw(),它取消引用迭代器,它应该给我一个我的类框的对象,它确实有那些方法。我做错了什么,对糟糕的标题感到抱歉。

最佳答案

这是运算符优先级的问题。

运算符 . 的优先级高于运算符 *。使用括号强制运算符 * 首先应用。

(*it).update(1,1);
(*it).draw();

您还可以在迭代器上使用 operator ->

it->update(1,1);
it->draw();

另见:What is the difference between the dot (.) operator and -> in C++?cppreference: Member access operators .


@andre 正确地指出您也可以使用反向迭代器以相反的顺序迭代序列,但您应该正确使用它们。

for(vector<Box>::reverse_iterator it = shapes.rbegin(); it != shapes.rend(); ++it)
{
it->update(1,1);
it->draw();
}

关于C++ 迭代器运算符优先级问题 *it.method() vs (*it).method() vs it->method(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17643338/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com