错误笔记:包含表达式的语句的执行顺序

众所周知,对于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++的操作放到表达式外。

现在踩过的坑希望以后不会再犯。

posted on 2017-11-15 11:51  不迷阿狸  阅读(190)  评论(0)    收藏  举报

导航