You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:12:48