我想知道在我看到的代码的一部分中是否有任何重要意义
return (num!=0);
其中num是一个int。这是一个布尔函数的return语句,如果num != 0
想要返回TRUE,如果num = 0
则返回false。
我不确定这是否存在隐藏的意义,但我不明白为什么他们不能简单地写:
return num;
以下是我看到的代码:
bool SemClass::cut(int &a, int &b, int &c)
{
int num = 0;
check(a, num);
check(b, num );
check(c, num);
return (num != 0);
}
答案 0 :(得分:6)
通过隐式转换以System.Byte[]
形式返回时,整数,浮点和无范围枚举的值0以及空指针和空指针到成员值将变为false。其他值(如1,2,3,4等)映射为true。该公约通过其流程控制声明在原始C中建立; C当时没有布尔类型。
隐式转化:en.cppreference.com/w/cpp/language/implicit_cast
在这种情况下,在C ++中,编写boolean
和num
都很好。但是,num!=0
可能会使该方法返回布尔值更明显。从技术上讲,只有值num!=0
的整数等于布尔值false,而所有其他值等于布尔值true。通过编写0
,明确表示如果num不等于0,则该方法将返回true,如果是,则返回false。
良好的做法规定,如果它是真正的真值,那么你应该使用num!=0
,因为它使调用者非常清楚将返回什么。返回boolean
时,可以将其视为代码/枚举类型值。
因此,integer
在这种情况下优先于num!=
。但是,不需要括号。如果在方法返回num
时返回integer
,某些编译器也会发出警告。
答案 1 :(得分:2)
作者可能写过return num
,编译器会生成完全相同的二进制文件。在这里,作者试图明确并尽可能地让读者猜测函数返回的内容。
当快速阅读器看到return num
知道num
是int
并且当前函数返回bool
时,他需要停止一小部分一秒钟到几秒钟(取决于它的浓度和C ++的易用性),要记住一个整数可以隐式转换为带有映射0 -> false, anything else -> true
的布尔值。那么,为什么不写下来呢?
当快速阅读器看到return num!=0
,(s)时,他猜测当前函数返回一个布尔值(否则它可能是可疑的),并且很容易理解返回值的含义。
根据经验,我建议选择更明确的写作,当它不会损害阅读时,以及何时只需要几个(或更少)字符。不要忘记你没有编写编译器的代码,你为许多工作或将与你一起工作的其他开发人员编写代码(r代码)。 C ++在20年内可能不太常见,如果你的程序不仅可以被大师轻松理解,而且可以被大家理解(我在那里概括,不仅仅是讨论隐式的布尔转换),这将是很好的。
答案 2 :(得分:1)
作者在两个方面(过分)谨慎:
括号是多余的。
C ++中的任何数字类型都隐式转换为bool
:如果数字为零,则为false
,否则为true
。
我个人更喜欢裸体return num;
,因为我觉得更清楚。
(注意,在C中,关系运算符返回int
类型1和0,而不是true
和false
)。