C++多return语句编码实践疑问:是否应使用布尔变量替代《A Tour of C++》示例中的多返回写法?
关于C++函数多返回点的编码规范疑问解答
这个问题其实触及了编程规范里一个很经典的争论点——单返回点vs多返回点,咱们一步步拆解来看:
「不推荐多个return」的由来
这个说法源于早期结构化编程的理念,当时为了避免复杂函数里出现过多分散的return导致代码逻辑难以跟踪(比如一个几百行的函数里到处return,读者得跳来跳去理清楚所有路径),所以强调单入口单出口。但要注意:这个规则是针对复杂函数的,不是一刀切的硬性要求。
回到你的具体场景
你的例子里,accept()函数非常短小,逻辑也极其简单——读入一个字符,是'y'就返回true,否则返回false。这种情况下,原代码的写法反而更清晰:
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; }
读者一眼就能看到「满足条件直接返回,其他情况统一返回false」,不需要额外维护一个中间变量,也没有多余的代码。
如果改成用布尔变量的写法:
bool accept() { cout << "Do you want to proceed (y or n)?\n"; char answer = 0; cin >> answer; bool result = false; if (answer == 'y') { result = true; } return result; }
反而多了一个result变量,读者需要跟踪这个变量的赋值变化(虽然这里只有一处,但完全没必要),增加了不必要的认知负担。
现代编码规范的视角
现代C编码规范(比如Google C Style Guide、ISOCPP的官方建议)都没有强制要求单返回点,而是强调可读性优先:
- 如果多返回点让代码逻辑更直接、更易理解,就大胆用;
- 只有当函数逻辑复杂(比如有多个嵌套分支、大量中间状态),多返回点会导致逻辑混乱时,才考虑用一个统一的返回变量来整理路径。
而且Bjarne Stroustup本人在《A Tour of C++》里使用这个示例,本身就说明这种写法在C++社区是被认可的。
总结
你的想法有历史依据,但在这个具体场景下,原代码的写法反而更符合现代编码规范的核心原则:清晰、简洁。不需要刻意为了「单返回点」而添加冗余代码,关键是让代码逻辑一目了然。
内容的提问来源于stack exchange,提问作者elmarki
相关产品推荐
相关产品推荐

