gpt4 book ai didi

c++ - 对于带括号的循环中的 return 语句,错误可能会到达非 void 函数的末尾,但在没有括号的循环中则不会

转载 作者:太空狗 更新时间:2023-10-29 20:20:31 25 4
gpt4 key购买 nike

在第一种情况下,它显示错误:控制到达非空函数的末尾。但在第二种情况下,即使代码与第一个代码执行相同的操作,它也没有显示任何错误。有人可以告诉我在编译器中两种情况下到底发生了什么吗?还有为什么 case 1 的 return 语句没有被确认

//case 1
int checkA(const vector<int>& a, int n, int k)
{
for(int i=0; i<n; i++)
{ if(k%a[i])
return 0;
return 1;
}
}
//case 2
int checkA(const vector<int>& a, int n, int k)
{
for(int i=0; i<n; i++)
if(k%a[i])
return 0;
return 1;
}

最佳答案

它不做同样的事情。如果您以更好的格式发布代码段,您会看到以下内容:

//case 1
int checkA(const vector<int>& a, int n, int k)
{
for(int i=0; i<n; i++)
{
if(k%a[i])
return 0;
return 1;
}
}

情况2是

//case 2
int checkA(const vector<int>& a, int n, int k)
{
for(int i=0; i<n; i++)
if(k%a[i])
return 0;
return 1;
}

在情况 1 中,您检查第一个数组元素 (a[0]) 是否整除 k,如果是,返回 1 立即在同一次迭代中。问题是,如果数组有零个元素(n 为 0),则根本没有第一次迭代,因此,不会命中任何 return 语句(return 0并且 return 1 只能在第一次迭代时发生)。

情况 2 的最终返回 1 仅在循环之后发生,前提是没有数组元素触发更早的退出。

关于c++ - 对于带括号的循环中的 return 语句,错误可能会到达非 void 函数的末尾,但在没有括号的循环中则不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50693110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com