我知道这很简单,但我无法理解它实际上是如何工作的,下面是片段:
int test(int a, int b)
{
return (a==b);
}
Return 语句在匹配的情况下返回 1,否则返回 0。
a) 这里到底发生了什么?
b) 那么当我们只想比较和返回而不是使用 if 和 else 时,使用 this 是否更好?
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.
您有一个布尔语句,它根据 a 和 b 的值返回 true 或 false。这个布尔值被转换成一个 int,因为这是函数的返回类型。
这可能是一个简单的例子,但我建议如果函数“test”真的是一个布尔值,那么它应该返回布尔类型而不是整数。通常,如果您返回一个 int,那么您将返回:
基本上你在 return 语句中有 if 语句。发生的事情是,当a==b
在if
语句中时,它返回 true,即 number 1
。如果它是假的,它会返回0
。这与这里发生的事情完全相同。
您的代码可以重写为更清晰,如下所示:
int test(int a, int b){
if(a==b)
return 1;
else
return 0;
}
至于实用性或最佳实践,我想说这取决于你,两者都完成同样的事情,但你的方式稍微简洁一些。
这里到底发生了什么?
if(a == b)
return 1;
else
return 0;
那么,当我们只想比较和返回而不是使用 if 和 else 时,使用 this 是不是更好?
它们是等价物。没有一个比另一个更好。这只是编码风格/更好的外观。
a 和 b 之间的 "==" 充当检查 a 是否等于 b 的运算符。如果它们是,则返回 true(或作为 int,1),如果不是,则返回 false (0)。
据我所知,这看起来比等效的 if 语句更整洁,但我不确定它是好是坏(等待编译器优化)
a == b 是一个返回 true 或 false 的表达式,一个 bool 类型,因为返回类型是 int,所以在调用完成之前,评估值会隐式转换为 int。
表达式 (a == b) 是 bool 类型,可以隐式转换为 int:false 转换为 0,true 转换为 1。所以基本上相当于 "if (a == b) return 1; else return 0;",更简洁。抱歉格式错误,我是用手机打字
if 语句不同于单个布尔表达式。与 if 语句一样,编译器会生成 JUMP 指令,这会损害分支预测,从而可能会影响程序性能。
就像在 a == b 表达式中一样,聪明的编译器可能会生成 xor 指令而不是使用 JUMP,它更有效,并且对程序员(不是人类)更具可读性:)