袁瑞's profile袁瑞的共享空间PhotosBlogGuestbookMore ![]() | Help |
|
May 23 操作符“=”的巧妙用法和陷阱写程序久了,一直习惯了a=b=c的代码方式。今天才发现其中也有玄机。 模仿STL的list写了一个list的迭代器 其中的插入方法如下: Iterator insert(iterator itr, const Object &x) { ListNode* p= itr.current; ListNode* newnd = new ListNode(x, p->prev, p); //创建一个新的节点,参数分表为:节点数据、上一个节点、下一个节点 p->prev->next = newnd; p->prev = newnd; return iterator(newnd); } 我将此段代码简化后为: Iterator insert(iterator itr, const Object &x) { ListNode* p= itr.current; return iterator(p->prev->next = p->prev = new ListNode(x, p->prev, p) ); } 执行结果错误。 分析后才发现,a=b=c的代码,分解后是b=c;a=c ,导致以上错误出现。
正确代码应该是: Iterator insert(iterator itr, const Object &x) { ListNode* p= itr.current; return iterator(p->prev = p->prev->next = new ListNode(x, p->prev, p) ); } |
|
|