不良的编码实践?条件中的预递增 &&
Bad coding practice? A pre-increment in a condition with &&
在我的代码中,我有
while (++num1begin >= 0 && isdigit(eq[num1begin]))
应该递增num1begin,检查num1bein现在是否大于或等于零,并检查其他条件。
这是糟糕的编码实践吗?(它确实在做我上面描述的事情吗?)
任何在您的条件下有副作用的事情都应该避免,因为这会迫使阅读此代码的人检查几次有效性。
换句话说,它很容易出错,而且很难调试。如果在if
或while
之前或内部增加变量,它也会起作用,但更容易理解。
while(++num1begin>=0&&isdigit(eq[num1begin])
所有个人偏好-IMHO没有错。我个人更喜欢简洁——以及在屏幕上多显示一行上下文——而不是之前在屏幕上显示++num1begin
。。。。
对我来说,我本能地想检查++num1begin >= 0
逻辑——这需要一点脑力劳动,但无论增量是在同一行还是之前的一行,都必须这样做。&&
另一侧的评估顺序和使用安全性不需要考虑/努力,但会因读者而异。不过,你应该时刻考虑你的"观众"。。。如果其他程序员是专业的C++开发人员,他们应该对此非常满意。如果它们不是,并且可能不得不停下来思考短路评估和序列点,那么您可能需要将其拆分。陷入代码维护者的最低公分母并不总是最好的。。。人们应该学习语言。。。但不同的人群自然会遇到不同的代码库。
"我本能地想检查…"-num1begin
用于索引到eq
,isdigit()
意味着它是一个字符数组,因此我对该代码的关注包括:
- CCD_ 9是否是有符号类型(因此第一个条件可能是false)
- CCD_ 11的CCD_
num1begin >= 0
在每次循环迭代中都被测试,但可能只需要第一次- 不存在用于搜索超过
eq
末尾的检查
对上述任何一项的更正都可能保证放弃当前代码,但如果代码功能正确且有效,那么我也可以。
相关文章:
- 如何确定我已使用非编码文件到达 EOF?
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 在卡萨布兰卡形成编码参数的列表
- 使用C++进行游程编码
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 使用已使用 java 编码的 openssl 解码数据
- boost 是否有按特殊类型值编码状态"compact optional"?
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 如何使用 C++将 ISO-2022-KR 编码转换为 UTF-8 编码?
- 绝对编码器十六进制输入
- 防止C++中的硬编码数字
- 为什么"using System;"不被视为不良做法?
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 使用文件内容作为硬编码字符串
- 运行长度编码程序 c++ 的问题
- 以C++为单位进行运行长度编码
- *新的编码器*格式和运算符
- wxthread文档示例有用或不良的编码实践
- 不良的编码实践?条件中的预递增 &&
- 情况是statement1 + statement2:编码不良