c++ - 多个返回语句
问题描述
我目前正在阅读 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 条件下对其进行修改,最终返回该布尔变量的值不是更好的做法吗?或者我只是在编造事情。
解决方案
不,你并没有完全编造,而且我知道没有这样的建议。
片段根据您的建议:
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 位,因此比较时间差异不是要考虑的事情。
推荐阅读
- javascript - 角度路由仅在某些时候有效
- python - 如何将蒙版应用于 tf.data 管道中的图像?
- c# - 在我们知道需要更改的地方定义一个供内部使用的接口是否有意义?
- java - Oracle UCM RIDC 服务使用 GET_SEARCH_RESULTS 获取文件夹路径
- flutter - Mobx Observer 无法处理 ObservableList 项目
- ios - Objective-C 框架和命名空间冲突
- amazon-web-services - 从 Jenkins 管道获取 EC2 代理的地址以用于 git push/scp?
- c++ - std::find_if 给出“'void'类型的条件表达式是非法的”错误
- java - 转换 JavaRDD
- > 到 JavaRDD
- javascript - MIME 类型('text/html')不可执行