C ++布尔函数的意外行为和不可能的返回

时间:2015-11-29 19:32:12

标签: 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
        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;
}

该程序绝对没有任何内容,它只是一个模拟。为什么每次都写“是”,即使我不允许它在任何地方这样做。而且,输出不包含&#34; sth&#34;字。另外,当我改变时:

cout << "sth";
return true;

成:

cout << "sth";
return false;

它仍然会产生"yes"作为输出。

怎么会发生?

1 个答案:

答案 0 :(得分:3)

问题是,如果 < ?php $items = array( 'item1' => 'I love jquery4u', 'item2' => 'You love jQuery4u', 'item3' => 'We love jQuery4u' ); header('Content-type: application/json'); echo json_encode($items); ?> return,您的功能将退出而不会实际点击p == N-1。如果它被设置为合理的警告级别,你的编译器会警告你。

这会触发未定义的行为,因此可能会发生任何输出。 (我得到了#34;没有&#34;例如clang。)