如果是c ++语句

Zia*_*man 5 c++ data-structures

干草亲爱的!

我知道if语句在c ++中是一个昂贵的陈述.我记得,一旦我的老师说,如果声明在计算机时间意义上是一个昂贵的陈述.

现在我们可以通过在c ++中使用if语句来做所有事情,因此这在编程透视图中是非常强大的语句,但在计算机时间透视图中它很昂贵.

我是初学者,在介绍c ++课程后我正在学习数据结构课程.我的问题
是,我是否更好地使用if语句进行扩展?

Mat*_*hen 17

如果语句被编译成条件分支.这意味着处理器必须跳转(或不跳转)到另一行代码,具体取决于条件.在一个简单的处理器中,这可能导致流水线停滞,这在外行人的意义上意味着处理器必须尽早丢弃它所做的工作,这浪费了装配线上的时间.但是,现代处理器使用分支预测来避免停顿,因此如果语句变得更便宜.

总之,是的,它们可能很昂贵.不,你一般不应该担心它.但Mykola提出了一个单独的(虽然同样有效)的观点. 对于if或case语句,多态代码通常更可取(对于可维护性)


Sca*_*ark 13

我不确定你如何推断​​if语句很昂贵.

如果你有

if ( true ) { ... }
Run Code Online (Sandbox Code Playgroud)

然后,这if将使您的编译器最优化.

另一方面,如果你有..

if ( veryConvolutedMethodTogGetAnswer() ) { .. }
Run Code Online (Sandbox Code Playgroud)

那么这个方法veryConvolutedMethodTogGetAnswer()做了很多工作,你可以说这是一个昂贵的if语句,但不是因为if,而是因为你在决策过程中所做的工作.

"如果"在时钟周期方面本身通常不"昂贵".


Omn*_*ous 7

过早优化是个坏主意.在有意义的情况下使用if语句.当您发现代码的一部分需要改进其性能时,可能会从代码的那一部分中删除if语句.

如果语句可能很昂贵,因为它们会强制编译器生成分支指令.如果你能找到一种方法来编写相同的逻辑,那么即使有更多的总指令,编译器也不必完全分支,代码可能会快得多.我记得对于如何重新编码一小段代码以使用各种位操作而不是进行任何分支加速10-20%的因素,我感到非常惊讶.

但这并不是一般避免它们的理由.当你试图从一段你知道性能至关重要的代码中榨取最后一点速度时,请记住这一点,因为你已经运行了一个分析器和其他各种工具来证明这一点.

如果语句昂贵,另一个原因是它们会增加程序的复杂性,这使得它更难以阅读和维护.保持低功能的复杂性.不要使用过多的语句来通过函数创建不同的控制路径.


Myk*_*yev 5

从可维护性的角度来看,我会说很多 if statement都很昂贵.