C ++隐式返回类型在递归函数中,这是如何工作的

时间:2016-12-11 21:02:28

标签: c++ recursion binary-search undefined-behavior

我不明白这是怎么回事..

#include <iostream>
#include <vector>

using namespace std;

template<class T>
int binarySearch(const vector<T>& vect, const T& k, int i, int j) {
    int m;
    if(i > j) {
        return -1;
    }
    m = (i+j) / 2;
    if(vect[m] == k) {
        return m;
    } else {
        if(k < vect[m]) {
            binarySearch(vect, k, i, m-1); // No return statement
        } else {
            binarySearch(vect, k, m+1, j); // No return statement
        }
    }
}

int main() {

    vector<int> vect = {10, 15, 21, 30, 40, 60, 100};
    int pos = binarySearch(vect, 60, 0, vect.size()-1);
    cout << pos << endl; // prints 5

    return 0;
}

为什么即使函数调用中省略了返回,这个二进制搜索函数也能正常工作?我脑海中唯一想到的是,当调用return m时,返回的数据会返回堆栈,因为中间的函数没有返回任何内容。

在第一次我虽然它是某种VS优化/重构(VS2015显然允许void main()所以我认为它可能是),但即使在Eclipse中也会发生这种情况。这是编译器选项

g++ -c -fmessage-length=0 -std=c++11

我刚刚发现它的情况,我永远不会认为这样的事情会在递归发生的情况下起作用。

我在其他问题的答案中读到了缺少return语句在ISO C ++中被称为未定义的行为,但是是否存在递归函数或者这只是未定义行为的另一种情况?

0 个答案:

没有答案