sequence-points

    9熱度

    3回答

    void main(void) { int x,y,z; x=y=z=1; z = x && y && ++z;//is this fine? } 我最近開始閱讀關於序列點的東西,但我無法弄清楚上面的代碼示例是否正確。我知道&&算子引入了一個序列點,所以我不太確定表達式z = x & & y & & ++ z的行爲。有人請告訴我正確的答案。

    5熱度

    3回答

    所以我見過很多文章聲明在C++中雙重檢查鎖定,通常用於防止多線程嘗試初始化一個懶惰創建的單例,已被打破。普通雙檢查鎖定代碼讀取這樣的: class singleton { private: singleton(); // private constructor so users must call instance() static boost::mutex _init_mu

    16熱度

    3回答

    維基百科說,順序點在C++ 11中不推薦使用。那是什麼意思?這是否意味着由序列點引起的未定義行爲沒有影響?

    2熱度

    4回答

    了評論What's wrong with this fix for double checked locking?說: 的問題是,該變量可以是 分配的構造函數運行 (或完成)之前,而不是對象 分配之前。 讓我們考慮代碼: A *a; void Test() { a = new A; } ,以便更正式的分析,讓我們分裂A =新的A到幾個操作: void *mem = mallo

    9熱度

    4回答

    我有以下代碼 int m[4]={1,2,3,4}, *y; y=m; *y = f(y++); // Expression A 我的朋友告訴我,Expression A有一個明確的行爲,但我不知道他是否是正確的。 根據他的功能f()介紹了一個sequence point之間,因此行爲是明確的。 有人請澄清。 P.S:我知道我們不應該爲實際目的編寫這樣的代碼。這只是爲了學習的目的。 :)

    8熱度

    5回答

    最近,我看到了很多的問題,被問及輸出一些瘋狂但語法允許代碼之類的語句像i = ++i + 1和i=(i,i++,i)+1;。坦率地說,實際上很難有人在實際編程中編寫任何這樣的代碼。坦率地說,我從未在我的專業經歷中遇到任何這樣的代碼。所以我通常最終在SO上跳過這樣的問題。但最近Q這種問題的絕對數量讓我想起如果我錯過了某些重要的理論,跳過這樣的Q.我認爲這樣的Q's圍繞着Sequence points

    2熱度

    2回答

    這是很好的定義? Streamreader ^reader = gcnew Streamreader("test.txt"); String ^line; while ((line = reader->ReadLine()) != nullptr && line != "") { //do stuff } 我相信我讀的地方,它不能保證分配在第二個條件之前執行。這可能是我錯了

    4熱度

    1回答

    我得到一個警告,這條線: e = strtol(++s, (char **)&s, 10); 移動++s到一個單獨的語句使警告消失,但據我所知,這個警告完全不正確。 s的值僅用於計算++s一次。 s的第二次使用只是採取它的地址。有什麼我失蹤?