C++中a[k] = val[i++]写法是否存在未定义行为或不良编程实践?
C语言中
a[k] = val[i++]写法的疑问解答 有没有未定义行为?
完全没有。
C标准里的未定义行为,大多出现在同一个表达式里对同一个变量同时进行无顺序约束的修改和读取(比如i = i++这种)。而你的代码里,a[k] = val[i++]中:
- 先使用
i的当前值读取val数组元素,完成读取后才会把i加1 k只是被用来读取数组下标,和i的修改没有任何重叠依赖
这完全符合C标准的规则,不会触发未定义行为。
算不算不良编程实践?
这得看团队规范和场景:
- 从语法和功能上看,这是C里非常常见的简化写法,逻辑清晰的开发者一眼就能看懂执行顺序,完全没问题
- 如果团队要求“一行代码只完成一个明确动作”,或者代码需要给经验较少的开发者阅读,那拆成两行可能更友好:
这种写法可读性更强,不会有人误解执行顺序。a[k] = val[i]; i++;
总的来说,写法本身合法且常用,是否选择使用,取决于团队的编码风格和代码的可读性需求。
内容的提问来源于stack exchange,提问作者Dilip Kumar
相关产品推荐
相关产品推荐

