我最近开始使用标志来处理输入循环的有效性条件,因此可以在循环内的其他地方检查它,而不必重复多次执行相同的检查。但是,我不确定如何最好地分配国旗。对此有没有普遍的标准做法,或只是个人风格?如果有的话,编译后的代码有什么区别?if-check和inline条件之间是否存在编译器差异?
例如,而不是下面的代码:
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?将任务与其他任务分开是否有任何可移植性好处?从查看代码看来,第一种方式的好处似乎只有一个分支,但是每个代表需要额外的分配,并且还有其他方法?
您可以通过https://godbolt.org/轻松查看不同的编译器使用不同的优化选项生成的内容。但是,在任何情况下,在尝试优化之前,您应该对代码进行基准测试,以确定它是否重要 - 如果不是,请始终编写最清晰的版本。 –
这种微观优化几乎总是愚蠢的。把它写成对读者最有意义的方式。让编译器完成它的工作。 Gcc非常擅长优化这种情况。如果你很好奇,学习如何编译汇编(简单)并查看自己会发生什么(有点困难),这是一项有价值的技能。然后意识到没有两个编译器是相同的,包括相同编译器的版本。 @JesperJuhl对godbolt.org是正确的。这很酷。 – Gene
在交互式输入循环中担心纳秒时间毫无意义。使用你发现最具可读性的那个。 – molbdnilo