首页 > 解决方案 > 多个返回语句

问题描述

我目前正在阅读 Bjarne Stroustup 的“C++ 之旅”,我看到了以下示例:

bool accept()
{
     cout << "Do you want to proceed (y or n)?\n";     // write question
     char answer = 0;                                  // initialize to a value that will not appear on input
     cin >> answer;                                    // read answer

     if (answer == 'y')
           return true;
     return false;
}

我认为不建议使用多个 return 语句。在这种情况下,创建一个布尔变量,将其初始化为 0,然后在 if 条件下对其进行修改,最终返回该布尔变量的值不是更好的做法吗?或者我只是在编造事情。

标签: c++

解决方案


不,你并没有完全编造,而且我知道没有这样的建议。

片段根据您的建议:

Int accept()
{
     Int result=0;
     cout << "Do you want to proceed (y or n)?\n";     // write question
     char answer = 0;                                  // initialize to a value that will not appear on input
     cin >> answer;                                    // read answer

     if (answer != 'y')
         result=1;

     return result;
}

仔细观察,您会发现上面的代码段与您在书中找到的代码段没有区别,它们使用验证,区别在于使用的数据类型。现在,如果您需要简单地使用下面的函数接受,那么使用布尔值会更容易:

if(accept()) /*do something*/;

而不是:

if(accept()==0) /*do something*/

无论哪种方式,你都很好。

要考虑的另一件事是您的数据类型的大小,布尔值只有 1 位,而 int 是 4 字节,因此比较时间复杂度显然会有所不同,但您很可能永远不会注意到差异。

编辑:在java中,布尔值如上所述是1位,但由于它是c ++,由于1位不可寻址的问题,将其设为8位才更有意义,然后可以在内存中为其分配一个地址。因此,在 C++ 中,布尔值也是 1 字节或 8 位,因此比较时间差异不是要考虑的事情。


推荐阅读