C++ C+的意外行为+;布尔函数与不可能返回
我刚刚遇到了以下代码的一个非常奇怪的结果C++ C+的意外行为+;布尔函数与不可能返回,c++,return,return-value,C++,Return,Return Value,我刚刚遇到了以下代码的一个非常奇怪的结果 #include <iostream> using namespace std; const int N = 3; bool gen(int l1, int l2, int p) { if(p == N-1) { if (l1 == l2) { cout << "sth"; return false; } } else
#include <iostream>
using namespace std;
const int N = 3;
bool gen(int l1, int l2, int p) {
if(p == N-1) {
if (l1 == l2) {
cout << "sth";
return false;
}
}
else
return gen(l1+1, l2, p+1) || gen(l1, l2+1, p+1));
}
int main() {
if(gen(0,0,0)) cout << "yes";
else cout << "no";
return 0;
}
#包括
使用名称空间std;
常数int N=3;
布尔根(整数l1、整数l2、整数p){
如果(p==N-1){
如果(l1==l2){
cout问题在于,如果p==N-1
和l1!=l2
,则函数将退出,而不会实际命中返回
这会触发未定义的行为,因此可能会发生任何输出(例如,我对clang的回答是“否”)您的代码调用UB。如果l1!=l2
它不会返回值,但是p==N-1
。您的编译器通常应该对此发出警告--注意这些警告。我知道它不会返回任何内容,但我不知道它会导致类似的结果。我以为它是关于| |运算符的。
cout << "sth";
return true;
cout << "sth";
return false;