意味着什么
在包含返回的循环失败后无法提供返回
" 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;是必须的。
答案 0 :(得分:4)
如果size
为0,则for循环永远不会执行,因此该方法没有返回值。
答案 1 :(得分:2)
如果size
最终为0(例如其中一个字符串为“”),则永远不会运行循环。如果循环永远不会运行,那么返回的内容是未定义的,因为程序不会将结果写入要返回给函数的调用者。你得到的结果是在堆栈上预期返回值的内存内容中预先存在的内容。
当您决定在循环或其他分组语句(例如“if”)中返回值时,请始终手动运行代码检查以确保在每个有效路径上返回值,即使循环不运行
答案 2 :(得分:0)
在使用循环的情况下,如果条件总是从函数结束返回,则在开始时指定返回值并根据条件更新该值。