(p->prev = p->prev->next = new Node{x, p->prev, p})
是C ++代码段中的return语句。它用于在列表中插入新节点。我不太明白如何在一个单一的声明中有两个相等的运算符。
答案 0 :(得分:3)
看起来像
iterator
是一个班级。Node
也是一个类。x
是要插入的值。Node
是一个聚合,其中包含value
,prev
,next
的三个数据成员,或者具有按此顺序获取三个参数的构造函数。 p
是指向新节点之前的Node
的指针。根据这些假设:
new Node{ x, p->prev, p }
new
启动新节点,将其值设置为x
,将其上一个节点设置为p->prev
,将其下一个节点设置为p
。它返回一个指向这个新节点的指针。p->prev->next = /*...*/
设置next
的{{1}} - 即之前p->prev
之前的节点 - 指向这个新创建的节点。此表达式的值是指定的值(正式地,它是一个引用p
的左值,然后转换为右值,即读取的存储值),这是指向新值的指针节点p->prev->next
最终使p->prev = /* ... */
也指向此新节点。此表达式的结果再次是指向新节点的指针。最终结果是在p->prev
之前插入新节点。p
构造一个指向新节点的迭代器,iterator(/* ... */)
将其返回给调用者。不应该使用这样的代码。它可能看起来很可爱"但它很难阅读和理解,当我读到它时我的第一反应是#34;你确定它不是未定义的行为" ;?我花了一些时间来说服自己行为是明确定义的(至少在C ++ 11中)。