3

我知道这很简单,但我无法理解它实际上是如何工作的,下面是片段:

int test(int a, int b)
{
   return (a==b);
}

Return 语句在匹配的情况下返回 1,否则返回 0。
a) 这里到底发生了什么?
b) 那么当我们只想比较和返回而不是使用 if 和 else 时,使用 this 是否更好?

4

8 回答 8

7

a== b ..如果它是真的,它评估为true,如果不是,它评估为false。它返回评估的副本为int,魔术是由相等运算符完成的。

使用它是完全可以接受的。也很容易阅读。

return a == b只是一种更好的说法:

 if(a==b)
    return true;  
 else
   return false; //1 or 0  as true or false depending on the language.
于 2013-01-05T02:51:08.633 回答
2

您有一个布尔语句,它根据 a 和 b 的值返回 true 或 false。这个布尔值被转换成一个 int,因为这是函数的返回类型。

这可能是一个简单的例子,但我建议如果函数“test”真的是一个布尔值,那么它应该返回布尔类型而不是整数。通常,如果您返回一个 int,那么您将返回:

  • -1 如果 a < b
  • 0 如果 a == b
  • 1 如果 a > b
于 2013-01-05T02:54:26.427 回答
1

基本上你在 return 语句中有 if 语句。发生的事情是,当a==bif语句中时,它返回 true,即 number 1。如果它是假的,它会返回0。这与这里发生的事情完全相同。

您的代码可以重写为更清晰,如下所示:

int test(int a, int b){
   if(a==b)
       return 1;
   else
       return 0;
}

至于实用性或最佳实践,我想说这取决于你,两者都完成同样的事情,但你的方式稍微简洁一些。

于 2013-01-05T02:51:04.043 回答
1

这里到底发生了什么?

if(a == b)
    return 1;
else
    return 0;

那么,当我们只想比较和返回而不是使用 if 和 else 时,使用 this 是不是更好?

它们是等价物。没有一个比另一个更好。这只是编码风格/更好的外观。

于 2013-01-05T02:54:25.883 回答
0

a 和 b 之间的 "==" 充当检查 a 是否等于 b 的运算符。如果它们是,则返回 true(或作为 int,1),如果不是,则返回 false (0)。

据我所知,这看起来比等效的 if 语句更整洁,但我不确定它是好是坏(等待编译器优化)

于 2013-01-05T02:52:32.343 回答
0

a == b 是一个返回 true 或 false 的表达式,一个 bool 类型,因为返回类型是 int,所以在调用完成之前,评估值会隐式转换为 int。

于 2013-01-05T02:55:19.760 回答
0

表达式 (a == b) 是 bool 类型,可以隐式转换为 int:false 转换为 0,true 转换为 1。所以基本上相当于 "if (a == b) return 1; else return 0;",更简洁。抱歉格式错误,我是用手机打字

于 2013-01-05T02:56:21.957 回答
0

if 语句不同于单个布尔表达式。与 if 语句一样,编译器会生成 JUMP 指令,这会损害分支预测,从而可能会影响程序性能。

就像在 a == b 表达式中一样,聪明的编译器可能会生成 xor 指令而不是使用 JUMP,它更有效,并且对程序员(不是人类)更具可读性:)

于 2013-01-05T03:05:14.303 回答