这里的运营商的顺序

0 c++ operators

好的我需要扩展代码,但这里有一些非常复杂的东西:

((Traces.Last=new SymbolSequence::Node)->Prev=(Discard.First=Processing1)->Prev)->Next=Traces.Last;
Run Code Online (Sandbox Code Playgroud)

我需要将这些赋值分配给语句,但我无法确定它的顺序.带括号的顺序让我困惑,是数学还是编译器做他想做的事情?

非常感谢.

Chr*_*odd 8

该代码可能

Traces.Last = new SymbolSequence::Node;
Discard.First = Processing1;
Traces.Last->Prev = Discard.First->Prev;
Traces.Last->Prev->Next = Traces.Last;
Run Code Online (Sandbox Code Playgroud)

但是,由于它既访问Traces.Last又设置它而没有插入序列点,实际结果是未定义的.很可能编译器可能产生如下内容:

temp = Traces.Last;
Traces.Last = new SymbolSequence::Node;
Discard.First = Processing1;
Traces.Last->Prev = Discard.First->Prev;
Traces.Last->Prev->Next = temp;
Run Code Online (Sandbox Code Playgroud)

并且原始程序员想要类似的东西.