if语句的这种用法是否会导致未定义的行为?

Hyp*_*nia -8 c++ conditional if-statement undefined-behavior language-lawyer

我想知道条件语句(例如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
}
Run Code Online (Sandbox Code Playgroud)

现在,是否通过不将所有3个变量都包含在每个条件中来获得不确定的行为?是否将所有未说明的条件都放入else语句中?如果是这样,如果我放弃else语句会怎样?我有完全相同的if语句(在更复杂的情况下),而且我似乎每次都不会进入正确的语句。

如果有此规定,请赐教。

eer*_*ika 5

通过不将所有3个变量都包含在每个条件中,我会得到不确定的行为吗?

不将所有变量都包含在每个条件中的行为本身并不是不确定的。

是否将所有未说明的条件都放入else语句中?

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

如果我放弃else语句会怎样?

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