void main(void)
{
int x,y,z;
x=y=z=1;
z = x && y && ++z;//is this fine?
}
我最近開始閱讀關於序列點的東西,但我無法弄清楚上面的代碼示例是否正確。我知道&&算子引入了一個序列點,所以我不太確定表達式z = x & & y & & ++ z的行爲。有人請告訴我正確的答案。
了評論What's wrong with this fix for double checked locking?說: 的問題是,該變量可以是 分配的構造函數運行 (或完成)之前,而不是對象 分配之前。 讓我們考慮代碼: A *a;
void Test()
{
a = new A;
}
,以便更正式的分析,讓我們分裂A =新的A到幾個操作: void *mem = mallo