*it % 2 != 0 ? flst.erase_after(prev) : ++prev, ++it, ++d;
// 實際解析為:
(*it % 2 != 0 ? flst.erase_after(prev) : ++prev), ++it, ++d;
?: 優先級 高於 逗號 ,。表達式被解析為:
(條件 ? 真分支 : 假分支), 表達式2, 表達式3
導致 ++it, ++d 無條件執行。
// 寫法 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 或提取函數。」