C++代码中第一个if分支需加return 0,第二个为何无需?
问题分析:C++条件分支的执行逻辑差异
代码示例
#include <iostream> #include <string> int main() { std::string question; std::getline(std::cin, question); if (question == "yes") { std::cout << "Let's rock and roll!" << std::endl; return 0; // 该行 } if (question == "no") { std::cout << "Too bad then..." << std::endl; } else { std::cout << "What do you mean by that?" << std::endl; } return 0; }
问题描述
删除第一个if (question == "yes")分支中的return 0语句后,输入"yes"时会依次输出"Let's rock and roll!"和"What do you mean by that?",不符合预期;但if (question == "no")分支无需添加return 0,输入"no"时仅输出"Too bad then...",符合预期。请问为何第一个分支需要return 0,第二个却不需要?
解答
这是因为代码里的两个条件分支结构完全不同:
第一个
if (question == "yes")是独立的单分支,它和后面的if-else没有任何关联。当输入"yes"时,执行完该分支的输出后,如果没有return 0,程序会继续向下执行后续代码——此时question是"yes",不满足if (question == "no")的条件,就会进入else分支执行输出,最终出现两次打印的情况。第二个
if (question == "no")和紧随其后的else是绑定的一组分支结构。当输入"no"时,执行完该分支的输出后,程序会直接跳过else分支,走到最后的return 0,不会触发额外的输出,自然不需要用return 0来提前终止程序。
简单总结:第一个if是孤立的,不提前退出就会继续走后面的代码;第二个if和else是成对的,执行完if就不会碰else,所以不需要额外终止。
内容的提问来源于stack exchange,提问作者TheEndIsRelaxing
相关产品推荐
相关产品推荐

