【发布时间】:2015-11-29 19:32:12
【问题描述】:
我刚刚遇到了以下代码的一个极其奇怪的结果。
#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;
}
该程序完全没有做任何事情,它只是一个模拟。为什么它每次都写yes,即使我不允许它在任何地方这样做。此外,输出不包含“sth”字。另外,当我改变时:
cout << "sth";
return true;
进入:
cout << "sth";
return false;
它仍然产生"yes" 作为输出。
怎么会这样?
【问题讨论】:
-
您的代码调用了 UB。如果
l1 != l2而是p == N-1,它不会返回值。您的编译器通常应该对此发出警告——密切注意这些警告。
标签: c++ return return-value