我正在为我的客户构建一个javascript指标,他们给了我旧系统的C ++代码。我之前从未做过C ++程序。下面是C ++代码的一部分。我想知道的是在行中
if (it3 != d1Swing.end() && it3->x == h[i].x) --(it1 = it2 = it3);
- (it1 = it2 = it3)是什么意思?它在javascript中会是什么样子?
vector<PTPoint::PTIndexPoint> dnSwing;
list<PTPoint::PTIndexPoint> hq, lq;
vector<PTPoint::PTIndexPoint>::iterator it1 = d1Swing.begin(), it2 = d1Swing.begin(), it3 = ++d1Swing.begin();
//
// more code here
//
for (int i = 0; i < period; ++i)
{
while (!hq.empty() && hq.back().y < h[i].y) hq.pop_back();
hq.push_back(h[i]);
while (!lq.empty() && lq.back().y > l[i].y) lq.pop_back();
lq.push_back(l[i]);
if (it3 != d1Swing.end() && it3->x == h[i].x) --(it1 = it2 = it3);
//
// more code here
//
}
//
// more code here
//
p->swap(dnSwing);
提前致谢。
tslin
答案 0 :(得分:1)
这意味着他们以前的程序员喜欢“聪明”。
作业的价值是对分配给的对象的引用,以及与权利相关联的作业。
--(it1 = it2 = it3)
是
--(it1 = (it2 = it3))
并且打算将it3
的值分配给it2
和it1
,然后递减it1
。
(我有一种预感,这可能是未定义的,当你在C ++中聪明时,这是经常发生的事情。)
it1
显然是为了“落后一步”it2
。
更合理的写作方式是
it2 = it3;
it1 = it2 - 1;
(在JavaScript中,我怀疑你需要使用数组索引而不是迭代器来完成同样的事情。)