在c ++中返回语句

时间:2014-11-05 03:52:03

标签: c++

意味着什么

  

在包含返回的循环失败后无法提供返回

" C ++入门第五篇",第295页?

特别是,编译器没有检测到此错误,运行时发生的情况未定义。

我使用的书样本如下:(vs2013)

#include "stdafx.h"
#include "iostream"
#include "string"
using std::string;

bool str_subrange(const string &str1, const string&str2) {
    if (str1.size() == str2.size())
        return str1 == str2;
    auto size = (str1.size() < str2.size()) ? str1.size() : str2.size();
    for (decltype(size)i = 0; i != size; ++i) {
        if (str1[i] != str2[i])
            return false;
        else
            return true;
    }
}

int _tmain(int argc, _TCHAR* argv[]) {
    if (str_subrange("lyc", "talent"))
        std::cout << "yes" << std::endl;
    else
        std::cout << "nope" << std::endl;;
    system("pause");
    return 0;
}

效果很好,我想知道&#34;返回&#34;是必须的。

3 个答案:

答案 0 :(得分:4)

如果size为0,则for循环永远不会执行,因此该方法没有返回值。

答案 1 :(得分:2)

如果size最终为0(例如其中一个字符串为“”),则永远不会运行循环。如果循环永远不会运行,那么返回的内容是未定义的,因为程序不会将结果写入要返回给函数的调用者。你得到的结果是在堆栈上预期返回值的内存内容中预先存在的内容。

当您决定在循环或其他分组语句(例如“if”)中返回值时,请始终手动运行代码检查以确保在每个有效路径上返回值,即使循环不运行

答案 2 :(得分:0)

在使用循环的情况下,如果条件总是从函数结束返回,则在开始时指定返回值并根据条件更新该值。