Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+的意外行为+;布尔函数与不可能返回_C++_Return_Return Value - Fatal编程技术网

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;