这种 if 语句的使用会导致未定义的行为吗?

Does this usage of if statements cause undefined behaviour?

我想知道条件语句(例如 if 语句)的正确用法以避免未定义的行为。让我们从一个例子开始:

uint8_t x = 0;
bool y = false;
bool z = false;

if ((x == 135) and !y and !z) {
    //do something
}
else if ((x == 135) and y) {
    x = 5;
    z = true;   
}
else if ((x == 5) and z) {
    x = 135;
    z = false;
}
else {
    //do something
}

现在,如果不将所有 3 个变量都包含在每个条件中,我会得到未定义的行为吗?每个下落不明的条件都会进入 else 语句吗?如果是这样,如果我去掉 else 语句会发生什么?我有完全相同的 if 语句(在更复杂的情况下),但我似乎每次都没有进入正确的语句。

请赐教有没有这方面的规定?

will I get undefined behaviour by not including all 3 variables into every condition?

每个条件不包含所有变量的行为本身并不是未定义的。

Will every unaccounted for condition go into the else statement?

语句-false(即关键字else后的语句)如果条件为假则执行

what happens if I get rid of the else statement?

从 if 语句之后的语句继续执行。

不,您这里没有未定义的行为。听起来像是您没有条件(布尔)逻辑的准确心智模型。 else 始终是 if 语句的可选部分。

将执行 { ... } 个块中的一个 。更改其中任何一个中 xyz 的值将不会导致执行任何其他值,决定是 first

根据经验,是的,尝试读取未初始化的变量是个坏主意,因为这样做的行为通常是 undefined。但这里不是这种情况:所有变量都已初始化。

但是在 if(...) 条件下,您所需要的只是计算结果为 truefalse 的东西。在这一点上,您的代码绝对没问题。我会使用 &&|| 而不是 andor 尽管前者更常见。

有关未定义的相当全面的构造集,请参阅 What are all the common undefined behaviours that a C++ programmer should know about?