为什么这个布尔函数返回 true (74) 而程序显示 74?

Sta*_*ght 0 c++

我只是在摆弄这个函数,不知何故回文返回 74。我正在使用 Visual studio 2022。它是否应该不返回任何内容并捕获编译器错误,因为在下面的情况下永远不会返回 false?

bool palindromes(string str) {
    if (str.length() == 0 || str.length() == 1) return true;

    if (str[0] == str[str.length() - 1])
        palindromes(str.substr(1, str.length() - 2));
    else
        return false;
}


int main()
{
    cout << palindromes("lol");
} 
Run Code Online (Sandbox Code Playgroud)

for*_*818 5

palindromes(str.substr(1, str.length() - 2));是递归的典型错误。我想您想对该调用返回的值执行某些操作,但您忽略了它。递归函数的工作方式与非递归函数非常相似,没有隐式return.

str.length() == 0 || str.length() == 1非常相关,当此条件为时,该函数不会返回任何内容false,但此条件str[0] == str[str.length() - 1]true


这条线

palindromes(str.substr(1, str.length() - 2));
Run Code Online (Sandbox Code Playgroud)

什么也没做。该函数获取按值传递的参数,并且返回值被忽略。

不从声明为返回某些内容的函数中返回某些内容是未定义的行为。


使固定:

return palindromes(str.substr(1, str.length() - 2));
Run Code Online (Sandbox Code Playgroud)

但可能还有其他问题。