if-check 和内联条件之间是否存在编译器差异?

Is there a compiler difference between an if-check and inline conditional?

我最近开始使用标志来处理输入循环的有效性条件,因此可以在循环内的其他地方检查它,而不必多次重做相同的检查。但是,我不确定如何最好地分配标志。是否有关于此的一般标准做法,或者只是个人风格?什么,编译后的代码有区别吗?

例如,代替下面的代码:

bool isValidSize;

do {
    std::cout << "Enter the font size (8-12): ";
    std::cin >> fontSize;

    if (fontSize >= MIN_FONT_SIZE && fontSize <= MAX_FONT_SIZE) {
        isValidSize = true;
    } else {
        isValidSize = false;
        std::cout << "Invalid size. ";
    }
} while (!isValidSize);

可以更改 if 语句,使 isValidSize 的设置一目了然:

    isValidSize = (fontSize >= MIN_FONT_SIZE && fontSize <= MAX_FONT_SIZE);
    if (!isValidSize) {
        std::cout << "Invalid size. ";
    }

这会被编译为额外的 if-check 吗?将作业与其他任何东西分开是否有任何可移植性好处?仅从代码来看,第一种方式的好处似乎是可能只有一个分支,但每个 rep 都有一个额外的分配,并且还有一个 else?

没有区别:proof

GCC 6.3 上进行了测试并进行了优化 (-O3)。

选择您认为更具可读性的内容。