gpt4 book ai didi

c++ - 嵌套if ... else语句如何胜过C++中的一系列单选if语句

转载 作者:行者123 更新时间:2023-12-01 15:10:27 25 4
gpt4 key购买 nike

我正在阅读Paul和Harvey Deitel撰写的《 C++:如何编程,第九版》,我在第114页上发现了一些使我感到困惑的东西。
本书给出了示例代码:

if ( studentGrade >= 90 ) // 90 and above gets "A"
cout << "A";
else
if ( studentGrade >= 80 ) // 80-89 gets "B"
cout << "B";
else
if ( studentGrade >= 70 ) // 70-79 gets "C"
cout << "C";
else
if ( studentGrade >= 60 ) // 60-69 gets "D"
cout << "D";
else // less than 60 gets "F"
cout << "F";
这本书接着说:

Most programmers write the preceding statement as:

if ( studentGrade >= 90 ) // 90 and above gets "A"
cout << "A";
else if ( studentGrade >= 80 ) // 80-89 gets "B"
cout << "B";
else if ( studentGrade >= 70 ) // 70-79 gets "C"
cout << "C";
else if ( studentGrade >= 60 ) // 60-69 gets "D"
cout << "D";
else // less than 60 gets "F"
cout << "F";

The two forms are identical except for the spacing and indentation, which the compiler ignores. The latter form is popular because itavoids deep indentation of the code to the right, which can forcelines to wrap.


在其下面有一个框,标记为Performance Tip 4.1:

A nested if...else statement can perform much faster than a series of single-selection if statements because of the possibility of early exit after one of the conditions is satisfied.


我不太了解,因为(我假设“一系列单选if语句”表示第二个代码示例,在相同的缩进上使用 if...else if;这是非常流行的样式)在C和C++中,当 if语句或以下 else if语句之一被测试为真时,其余 else if语句甚至都没有经过测试,只是被跳过了。那与提前退出不一样吗?此外,该书还说,就编译器而言,两种形式是相同的,为什么一种形式要优于另一种形式?

最佳答案

书中未显示“if语句的单选系列”。它与您显示的两个代码示例相似,但没有else关键字。但是,您必须添加一些代码以排除早期情况。

if ( studentGrade >= 90 ) // 90 and above gets "A"
cout << "A";
if (studentGrade < 90 && studentGrade >= 80 ) // 80-89 gets "B"
cout << "B";
if (studentGrade < 80 && studentGrade >= 70 ) // 70-79 gets "C"
cout << "C";
if (studentGrade < 70 && studentGrade >= 60 ) // 60-69 gets "D"
cout << "D";
if (studentGrade < 60) // less than 60 gets "F"
cout << "F";
除了必须运行您知道会是假的测试(输出分数后)之外,后期的测试也更加复杂,并且在那些扩展的测试中很容易出错(要么忘记排除较早的情况,要么正确键入排除项)。所有这些额外的代码也使代码在阅读时更难以理解。
因此,使用 if else链对于性能,代码可读性和代码维护更好。

关于c++ - 嵌套if ... else语句如何胜过C++中的一系列单选if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62940745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com