c++ - if-else 语句中的 "equal to"与 "not equal to"运算符

标签 c++ c

在 C 中编写 if-else 语句时,如果两者都可以产生相同的结果,是否有理由优先使用运算符“等于”而不是“不等于”?

下面的代码提供了上下文。因此,如果参数计数等于 2,则将从用户那里检索一个字符串。但是,如果获取任何其他参数值,则会出现错误消息。

int main(int argc, string argv[])
{
    string msg;

    if (argc == 2) 
    {
        msg = GetString();
    }
    else
    {
        printf("ERROR: Please only enter a single key! \n");
        return 1;
    }

但是,我可以通过将 if-else 循环的条件更改为“不等于”并翻转相关操作来实现与上述完全相同的结果。见下文:

int main(int argc, string argv[])
{
    string msg;

    if (argc != 2) 
    {
        printf("ERROR: Please only enter a single key! \n");
        return 1;
    }
    else
    {
        msg = GetString();
    }

无论如何,由于两者产生相同的结果,是否应该优先使用一个而不是另一个?

最佳答案

在 C++ 中有一个技术原因,那就是如果你有使用 == 的习惯。超过 != ,您不需要重载尽可能多的运算符。

当您处理函数对象(“仿函数”)时,这很重要。例如,当您使用标准容器类来存储您自己的自定义对象并希望它们自动排序时。为了使函数对象(例如 std::equal_to)工作,你的类需要重载 ==仅限运营商。你不必重载==!=两者都有。

同样,其他函数对象只需要重载 <而不是全部< > == != <= >= .


一般来说,否定对于人脑来说是不容易理解的。特别是如果你有双重否定。如果顺序在技术上无关紧要,大多数编程语言都习惯先编写相等检查。大多数情况下,它使代码更易于阅读。

但与编程和编码风格一样,没有黑白规则。如果检查的原因是发现错误,那么编写错误处理的最易读的方式优先于“人类发现否定更难阅读”。

认为这段代码写得不太好:

if(input == good)
{
  if(format == expected)
  {
    do_stuff();
    return ok;
  }
  else
  {
    return error_format;
  }
}
else
{
  return error_input;
}

想象一下,我们需要为此添加更多错误处理。很常见的情况:假设我们正在编写一个解析器或一些具有大量错误处理的数据协议(protocol)解码器。多层嵌套大括号很快就会把代码变成一团糟。

如果我们从 == 更改为 !=,我们可以摆脱嵌套 if 语句的需要。

if(input != good)
{
  return error_input;
}

if(format != expected)
{
  return error_format;
}

// if we got here then all is well
do_stuff();
return ok;

如果我们需要添加更多错误检查,这将更具可读性和可扩展性。因此,通过更改为 != 我们使代码更具可读性。

关于c++ - if-else 语句中的 "equal to"与 "not equal to"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40036165/

相关文章:

c++ - 编译链接 x86 静态库的 x64 动态库时的 LNK2001 和 LNK1120

c - 使用 Eclipse CDT 调试 Linux 内核时出现 “No source available 0x”

c - gcc 检测静态库中的重复符号/函数

c++ OpenGL问题绘图网格与存储在对象中的vbo和vao

c++ - 错误: invalid types ‘Pixel*[__complex__ int]’ for array subscript

c - 在函数中直接使用结构是否比在 C 中将它们传递给参数使用更多的资源?

c - 如何打印int数组中的char值

c - 在 C 中显示结构的字符元素

c++ - 对右值的非常量引用

c++ - 在 c++ () 或 {} 中委托(delegate)构造函数