C++三目运算符实现多分支是否需要额外添加括号?
C++嵌套三目运算符写法问题解答
首先需要修正你给出的示例2的语法笔误:你写的auto x2 = x == 10 ? (100 : x == 14 ? 140 : 0);实际无法通过编译,括号的正确位置应该包裹整个else分支的嵌套三目运算,修正后的示例2代码如下:
// 修正后的示例2 auto x2 = x == 10 ? 100 : (x == 14 ? 140 : 0);
以下基于修正后的示例2解答你的疑问:
- 示例1的写法完全合规,不是必须采用加括号的写法
C++标准中三目条件运算符?:的结合性为右到左,编译器会自动将无括号的示例1代码auto x2 = x == 10 ? 100 : x == 14 ? 140 : 0;解析为和修正后的示例2完全等价的逻辑,两种写法的语义、运行结果、编译生成的机器码没有任何差异,不存在语法违规问题。 - 加括号属于可读性优化,不属于语法强制要求
给嵌套的三目运算加括号的唯一作用是降低阅读门槛,让不熟悉三目运算符结合性的开发者能快速理解逻辑,属于代码风格层面的优化,没有强制要求必须使用。 - 复杂场景推荐加括号
如果三目运算的分支包含优先级低于条件运算符的复杂表达式(比如组合逻辑运算、赋值运算、逗号运算等),更建议加括号明确运算顺序,避免因对优先级理解偏差产生非预期的逻辑错误。
内容的提问来源于stack exchange,提问作者John Kan
相关产品推荐
相关产品推荐

