分号终止if语句是否是良好的编码实践?

Ind*_*dra 0 c++ coding-style

我正在循环i,j,k和n.我希望执行一个语句,除非k == jn == k.

如果我使用这样的代码:

if (k != j && n != i)
      //statement
Run Code Online (Sandbox Code Playgroud)

该声明不会在两种情况下执行:

  1. 当k = = j时n == j.
  2. 当k == j时n!= j.(这不是我需要的)

所以我使用了这样的代码:

if (k == j && n == i)
    ;else
    //statement
Run Code Online (Sandbox Code Playgroud)

通过此代码,语句将成功执行,除非k == j && n == i.

以分号结尾的if语句是否是用C++编码的好方法?

Mar*_*som 7

不,这不是一种好的编码方式.通常的方法是使用!反转逻辑:

if(!(k==j && n==i))
    //statement
Run Code Online (Sandbox Code Playgroud)

或者您可以使用De Morgan定律来反转逻辑:

if(k!=j || n!=i)
    //statement
Run Code Online (Sandbox Code Playgroud)


Jos*_*eld 5

你的问题是你错误地否定了这个条件.你应该这样做:

if (!(k==j && n==i))
  // statement
Run Code Online (Sandbox Code Playgroud)

或者,根据德摩根的法律:

if (k != j || n != i)
  // statement
Run Code Online (Sandbox Code Playgroud)