相關程式碼示範了連結方法呼叫:
但是,斷言在某些編譯器(如 GCC 和 Visual Studio)中失敗,而它在 Clang 中傳遞。
由於以下原因,此程式碼表現出未指定的行為計算子表達式的未指定順序,因為函數參數以無序的順序計算。鍊式函數呼叫為每個函數呼叫引入從左到右的計算順序,但每個呼叫的參數僅在它們所屬的成員函數呼叫之前排序。
在程式碼中,子運算式 s .find("even") 和 s.find(" don't") 相對於 s.replace(0, 4, "") 的順序不確定。根據評估順序,結果可能會因潛在的副作用而有所不同。
代碼可以細分如下:
A 在 B 之前排序,而 B 在 C 之前排序。項目1-9 彼此之間的排序是不確定的,但以下關係除外:
以上是Stroustrup 的《C 程式語言》第四版中的 C 程式碼連結方法呼叫是否具有明確定義的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!