Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 糟糕的编码实践?在带有&&;_C++ - Fatal编程技术网

C++ 糟糕的编码实践?在带有&&;

C++ 糟糕的编码实践?在带有&&;,c++,C++,在我的代码中,我有 while (++num1begin >= 0 && isdigit(eq[num1begin])) 它应该递增num1begin,检查num1begin现在是否大于或等于零,并检查其他条件 这是糟糕的编码实践吗?(它真的在做我上面描述的事情吗?应该避免任何对您的病情有副作用的事情,因为它迫使阅读此代码的人检查几次有效性 换句话说,它很容易出错,并且很难调试。如果在If或while之前或内部增加变量,则其工作原理相同,但更易于理解 而(++numbeg

在我的代码中,我有

while (++num1begin >= 0 && isdigit(eq[num1begin]))
它应该递增num1begin,检查num1begin现在是否大于或等于零,并检查其他条件


这是糟糕的编码实践吗?(它真的在做我上面描述的事情吗?

应该避免任何对您的病情有副作用的事情,因为它迫使阅读此代码的人检查几次有效性

换句话说,它很容易出错,并且很难调试。如果在
If
while
之前或内部增加变量,则其工作原理相同,但更易于理解

而(++numbegin>=0&&isdigit(eq[numbegin]))

所有的个人喜好-这并没有什么错。我个人喜欢简洁,并且在屏幕上有一行额外的上下文,而不是在之前的行上有
++numbegin

对我来说,我本能地想要检查
++num1begin>=0
逻辑-这需要一点脑力劳动,但必须完成,无论增量是在同一行还是在前一行。在
&&
的另一侧使用时,评估和安全的顺序不需要考虑/努力,但这将因读者而异。但是你应该一直考虑你的“观众”。。。如果其他程序员是专业的C++开发人员,他们应该很舒服。如果他们没有,并且可能不得不停下来思考短路评估和序列点,那么您可能需要将其拆分。陷入代码维护者的最低公分母并不总是最好的。。。人们应该学习语言。。。但是不同的人群自然会遇到不同的代码库

“我本能地想检查…”-
num1begin
用于索引到
eq
,而
isdigit()
意味着是一个字符数组,因此我对这段代码的关注包括:

  • num1begin
    是否为有符号类型(因此第一个条件可能为false)
  • -1
    num1begin
    不是代码试图避免从中搜索的实际哨兵值(给定哨兵值为-1且类型的最负值是常见的)
  • num1begin>=0
    将在每次循环迭代中进行测试,但可能只需要第一次
  • eq
    的末尾没有搜索的检查

对上述任何一项的更正都可能导致放弃当前代码,但如果代码在功能上正确且高效,那么我认为这没关系。

这样做有什么意义?只需增加循环中的数字,为什么要编写难以理解的代码?如此之多以至于你在这个网站上发布了一个问题!因此,表达式中的
num1begin
s在使用时应该是相同的值(如果这是您的意思)。然而,我发现很难理解。据我所知,替代方案需要两个赋值(或添加一个单独的条件语句)-以保持行为之前的增量-但可能仍然值得权衡。编写可维护的代码,让编译器来处理:)代码是清晰的,它的含义是明确定义的。@PeteBecker-如果清楚的话,为什么要提出这个问题。现在还不清楚。我只是为那些不得不a)审查它和b)维护它的笨蛋感到遗憾。我同意——生活充其量是棘手的,为什么要让它变得更难呢?