如果否则 vs && ||
If Else vs && ||
使用 if else 或 && 和 || 运算符编码之间有区别吗?
例如,在if-else风格中,我可以编写此代码
for( var i = 0; i < 1000000000; i ++ ) {
if( i % 2 == 0 ) {
f1();
} else {
f2();
}
}
在 && 和 || 风格中,我可以使用此代码获得相同的结果
(( i % 2 == 0 ) && (test1() || true)) || test2();
我在 JS 中测试了它们,它们大约在同一时间工作,但我没有在C++上测试它们。也许这取决于编译器或语言。
有速度差异吗?还是有什么区别?
谢谢
它可能工作相同,但您可能需要考虑的一件事是可读性。你的代码的第一个实例非常可读,而第二个实例让我想拿起笔和纸做数学。速度和可读性是权衡,除非你的程序在性能方面严重瓶颈,否则可读性是更好的目标。
您显然对if
方法更满意,因为替代方案中有许多多余的括号。
除非性能差异很大(在这种情况下没有(,否则请以 50% 的能力进行编程,以便您可以 100% 进行调试。
即采用您更满意并发现更具可读性的方法。
这个表达式的问题是
(test1() || true)
例如,函数 test1
可以返回类型 void
或未隐式转换为类型 bool
的类型的对象,例如没有适当转换运算符的类类型的对象。
而这条记录只会让代码的读者感到困惑。
编程KISS中有这样一个原则 - 保持简单愚蠢.:)
从第一个代码片段可以看出,程序员的意图是调用其中一个函数。
查看第二个代码片段,程序员似乎要评估复合逻辑表达式。所以这个代码片段只会引起问题。
如果编写表达式会更具可读性
i % 2 == 0 ? ( void )test1() : ( void )test2();
当然,在 JavaScript 中,您可以在不使用void
的情况下编写表达式
i % 2 == 0 ? test1() : test2();
这是对C++的要求。
相关文章:
- 如果没有malloc,链表实现将失败
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如果语句之后,返回vs无能为力
- 性能:否则如果 vs if 在已经返回的函数中
- 如果Constexpr - clang vs.GCC,则非constexpr变量
- 如果 constexpr vs if 与常量
- Cstring 在 VS 2012 中不起作用,但如果使用 VS 2012 打开 VC++ 6.0 项目,则可以工作
- 如果否则 vs && ||
- OpenProcess()返回0,如果不是从VS启动
- 如果存在,则使用它/检测C++中当前作用域的调用约定(thiscall vs cdecl)