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

河豚

我正在阅读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";

这本书接着说:

大多数程序员将前面的语句写为:

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";

除间距和缩进(编译器忽略)外,这两种形式是相同的。后一种形式之所以受欢迎,是因为它避免了代码向右缩进,从而可能导致换行。

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

嵌套的if ... else语句的执行速度比一系列单选if语句快得多,这是因为在满足其中一个条件后有可能提前退出。

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

1201程序警报

书中未显示“ 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链可以更好地实现性能,代码可读性和代码维护。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章