我是否应该将最后一个“返回”语句封装为“else { return .. }',如果它在逻辑上是可选的
Should I encapsulate the last `return` statement with `else { return ... }` if it is logically optional?
哪种格式在速度、性能和机器代码大小方面更好?
最后return
封装:
static bool MyClass::IsEqual(int A, int B)
{
if (A == B)
{
return true;
}
else
{
return false;
}
}
最后return
未封装:
static bool MyClass::IsEqual(int A, int B)
{
if (A == B)
{
return true;
}
return false;
}
要回答您的问题 - 生成并查看汇编代码。我敢打赌汇编程序代码是相同的 - 所以性能没有差异。
如果可能的话,我总是删除if/else
,考虑到你的例子,我会这样做:
static bool MyClass::IsEqual(int A, int B)
{
return (A == B);
}
但我知道现实世界的例子并没有这么简单。
哪种格式在速度、性能和机器代码大小方面更好?
它们都应该相同或接近它。 此外,你问错了问题。
一个更好的问题是,
我应该更喜欢哪个,为什么?
请记住,C++代码旨在由人类而不是机器读取。 鉴于此,选择一种编码风格而不是另一种编码风格的主要动机应该是它对人类的可读性。 尽管这种考虑很重要,但不幸的是,它也是主观的。 底线是你必须自己决定哪个更好,但重要的是你出于正确的原因提出正确的问题并思考答案。
两个代码片段应该产生完全相同的结果,所以这不是它们中的任何一个的参数。
真正决定使用哪个版本的是编码风格。if
/else
变体的优点是两个分支位于同一逻辑层上。有时这可能是这样写的一个很好的理由。
第二种形式可读性稍高,因为它降低了嵌套级别。使用一种或另一种形式绝对不会对性能造成损失。
相关文章:
- 逻辑运算符上出现错误代码 a')'
- 如果语句逻辑不正确
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- 如果可推导类型上有替换,可变参数模板类型推导会使编译器崩溃
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- 如果我在 const 函数上使用指针,我可以返回什么?
- 关于隐式声明的复制构造函数的引用在逻辑上不清楚
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 如果我在字符数组上使用 close() 会发生什么?
- 数组上的相同逻辑会产生不同的结果
- 如果类在堆上,函数是转到堆还是堆栈?
- 如果由不同的线程写入 8 字节,那么现代英特尔 x86 上的 8 字节读取是否保证理智?
- 如果逻辑未按预期工作
- C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
- 为什么static_cast允许下落,而逻辑上应该出于安全目的拒绝他们static_cast与安全无关?
- G 生成逻辑上错误的汇编代码
- C++:添加逻辑上正确的 if 语句会使我的程序崩溃
- 显示最大的数字,如果行上的错误会出现错误
- 是numeric_limits< int> :: is_modulo从逻辑上矛盾
- 我是否应该将最后一个“返回”语句封装为“else { return .. }',如果它在逻辑上是可选的