错误笔记:包含表达式的语句的执行顺序
众所周知,对于printf中的表达式是从右往左执行的,例如:
std::vector<int> t = { 1, 2, 3, 4 };
std::vector<int>::iterator it = t.begin();
printf("%d %d", *it, *(++it));
执行结果是:

是因为it先执行了*(++it),再是*it,这时it已经指向2了,所以输出的都是2。
今天在用cocos的时候出现了类似的问题:
sprite->setPosition(Point((*iter), *(++iter)));
我的本意是,根据iter取出两个连续的float作为sprite的x和y坐标。但是每次取出的x和y都一样。于是想到这个类似于printf的从右向左执行的机制。
以后为了清晰明了,最好将iter++的操作放到表达式外。
现在踩过的坑希望以后不会再犯。
浙公网安备 33010602011771号