C++ 如果条件不是',我是否应该选择两个if语句而不是if-else语句;不相关?

C++ 如果条件不是',我是否应该选择两个if语句而不是if-else语句;不相关?,c++,if-statement,C++,If Statement,所以我知道,一般来说,我更喜欢else if而不是if。但如果这两个条件不相关呢?例如,这些将被视为“相关”条件: if(行[a]='{'){ openCurly=true; } 如果(第[a]='}'行){ closeCurly=false; } 注意if语句中的两个条件是如何相互关联的,当一个是true时,另一个必须是false。这是因为行[a]可以是{或},但不能两者都是 下面是另一个例子: if(行[a]='{') { openCurly=true; } else if((行[a]='

所以我知道,一般来说,我更喜欢
else if
而不是
if
。但如果这两个条件不相关呢?例如,这些将被视为“相关”条件:

if(行[a]='{'){
openCurly=true;
}
如果(第[a]='}'行){
closeCurly=false;
}
注意if语句中的两个条件是如何相互关联的,当一个是
true
时,另一个必须是
false
。这是因为
行[a]
可以是
{
}
,但不能两者都是

下面是另一个例子:

if(行[a]='{')
{
openCurly=true;
}
else if((行[a]=';'&&&!openCurly)| |(行[a]='}'&&openCurly))
{
剂量测定(线);
第“”行;
}
如果第一个条件为true,则第二个条件的计算结果将永远不会为true,因此如果,则使用
else是有意义的。然而,这两个条件看起来大不相同

那么,我应该喜欢这样的东西吗

if(行[a]='{')
{
openCurly=true;
}
if((行[a]=';'&&&!openCurly)| |(行[a]='}'&&openCurly))
{
剂量测定(线);
第“”行;
}

您应该使用
else if
语句。这是因为
if-else
构造仅在第一条语句的计算结果不为true时检查第二条语句

在你举的例子中

if (line[a] == '{')
{
    openCurly = true;
}
else if ((line[a] == ';' && !openCurly) || (line[a] == '}' && openCurly))
{
    DoSomething(line);
    line = "";
}

if
语句替换
else if
将导致检查第二个条件,即使第一个条件为真,这完全没有意义,也会浪费您一些时间


将来,根据条件是否相互排斥,决定使用
else if
语句。

您可以这样做:

#include <stdint.h>

#define COMBINATION(x,y) ((uint16_t(x)<<8)|(uint16_t(y)<<0))

...

    switch (COMBINATION(line[a],openCurly))
    {
    case COMBINATION('{',false):
        ...
        break;
    case COMBINATION(';',false):
    case COMBINATION('}',true):
        ...;
        break;
    }
}
#包括

#定义组合(x,y)((uint16_t(x)
行[a]
怎么可能是
}
,同时也
{
?如果
方法,使用
否则。也不应该使用
行[a]='}“
branch set
openCurly=false
?根据条件是否相互排斥做出决定,而不是根据条件的外观。我编写了很多代码,没有其他选择,因为在if块中,我中断、继续、返回或退出(),这些语句之后就没有生命了!if和else创建分支,通过清空指令缓冲区来降低CPU的速度,或者通过推测执行来降低CPU的速度,因此,如果您可以在不使用if、else或三元运算符的情况下计算答案,那就更好了!这种想法有助于创建浮点NAN,因此矩阵处理可以在rward不需要对矩阵的任何部分进行条件处理:例如,如果有人得到一个除以零的结果,他们只返回NAN并继续计算。先做无条件工作,然后再做条件工作是优化代码的一个好方法。但是,先删除异常,留下一个更简单的宇宙,使用uncon传统的处理。分散if只会更频繁地扰乱CPU。这里有一个很好的讨论,我相信David正试图提出的观点:TL;DR:安排程序以最大限度地提高可预测性。补充:如果你真的有完全且仅依赖于一个变量的东西,你可能想使用
开关盒
,因为它不仅比
if-else
节省了大量的时间,而且更能说明所有可能的值。如果我只有两个if语句会怎么样?我是否仍应该使用
switch
?当您有很多情况需要用一个值检查时,请使用
switch
。“switch”语句通常更短,更容易阅读而不是
else if
语句。如果只有2个案例需要检查,我个人不会使用
开关
。@是的。根据经验,我会说4个以上的案例。“即使第一个是真的,也会导致第二个条件被检查,”如果编译器进行了优化(这是允许的),则不适用。但是为什么在这里使用宏?请不要建议这样做。一个简单的函数就可以了。@cigien:它们显然不一样。从性能角度看,预处理器定义可能更好(取决于编译器优化等).Code size wize,函数可能会更好(再次取决于编译器)。按调试的方式,函数会更好(更容易调试),但是如果正确编写预处理器定义,则甚至不需要调试代码的那个区域。如果您对此注释的唯一理由是“C++中的情况就是这样的”然后我建议你换一个职业,去法学院什么的。每个专家都建议不要使用宏(不包括一些你无法回避的边缘案例).性能方面不,没有区别。尤其是现代编译器优化amaginz算法。尤其是
constepr
和新的
consteval
。它们根本不值得。@goods是的,函数在这种情况下同样不可读。回到宏:using macros和讨论中唯一的潜在优势是性能,而现在这不是优势。所以,是的,我听了该领域专家的意见,但我也听了他们的观点,我认为没有理由使用macros。无论如何,这场讨论偏离了轨道。我说了我必须说的。从我的角度来看,这就到此为止.也许这里的一些答案会更有说服力。尽管这些答案只是专家的意见。我不确定你反对的是专家的建议。