首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 條件運算符 ? : 結合逗號表達式陷阱:優先級導致意外執行

     編輯:程式設計綜合問答

問題代碼


*it % 2 != 0 ? flst.erase_after(prev) : ++prev, ++it, ++d;
// 實際解析為:
(*it % 2 != 0 ? flst.erase_after(prev) : ++prev), ++it, ++d;

根因:運算符優先級

?: 優先級 高於 逗號 ,。表達式被解析為:
(條件 ? 真分支 : 假分支), 表達式2, 表達式3
導致 ++it, ++d 無條件執行。

修復:用大括號或 if-else


// 寫法 1:if-else 最清晰
if (*it % 2 != 0) {
    flst.erase_after(prev);
} else {
    ++prev;
}
++it; ++d;

// 寫法 2:強制分組(不推薦,可讀性差)
*it % 2 != 0 ? (flst.erase_after(prev), 0) : (++prev, 0);
++it; ++d;

最佳實踐

「含副作用的邏輯嚴禁寫在 ?: 或逗號表達式中,統一用 if-else 或提取函數。」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved