C++新手疑问:getResult(2,5)中if-else分支匹配规则解析
嵌套if-else的执行逻辑解析
先看你给出的代码,调用getResult(2,5)时的执行流程,核心要搞清楚C++里else的绑定规则:else永远和最近的、未被配对的if绑定,和代码缩进无关。
代码执行步骤(调用getResult(2,5))
- 传入参数
m=2,n=5,进入函数。 - 先判断外层条件
m < n:2<5成立,进入内层的if判断。 - 内层判断
n <=10:5<=10成立,执行ans = m + n,也就是ans=2+5=7。 - 内层if的条件成立,所以它对应的else(
ans = m * n)不会执行;外层if的条件已经成立,所以外层的else(ans = n/m)也完全不会触发。
关于你的困惑
你提到的第二个else,是属于内层的if(n<=10)的,不是外层if的分支:
- 只有当内层if条件不成立(也就是n>10)时,才会执行这个else的
ans=m*n; - 外层的else,只有当外层if条件
m <n不成立(比如m>=n)时,才会执行ans=n/m。
建议:用花括号明确代码块
原代码的缩进容易误导人,建议给if/else加上花括号,让结构一目了然:
int getResult(int m, int n) { int ans; if (m < n) { if (n <= 10) ans = m + n; else ans = m * n; } else { ans = n / m; } return ans; }
内容的提问来源于stack exchange,提问作者Tyrannicool
相关产品推荐
相关产品推荐

