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
)。
选择您认为更具可读性的内容。
我最近开始使用标志来处理输入循环的有效性条件,因此可以在循环内的其他地方检查它,而不必多次重做相同的检查。但是,我不确定如何最好地分配标志。是否有关于此的一般标准做法,或者只是个人风格?什么,编译后的代码有区别吗?
例如,代替下面的代码:
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
)。
选择您认为更具可读性的内容。