循环带括号时,return语句若非void函数结尾,为何会出错?
- 内容介绍
- 文章标签
- 相关推荐
本文共计444个文字,预计阅读时间需要2分钟。
在特定情境下,它可能显示错误:控制到非void函数的结尾。但在另一种情况下,即代码与第一个代码完全相同,它也不会显示任何错误。有人可以告诉我,在编译器中,在两种情况下究竟发生了什么吗?
在第一种情况下,它显示错误:控制到达非void函数的结尾.但在第二种情况下,即使代码与第一个代码完全相同,它也不会显示任何错误.有人可以告诉我在编译器中两种情况下究竟发生了什么?
同样为什么案例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; } } //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语句(返回0和返回1只能在第一次迭代时发生).
情况2的最终返回1仅在循环之后发生,如果没有数组元素触发先前的退出.
本文共计444个文字,预计阅读时间需要2分钟。
在特定情境下,它可能显示错误:控制到非void函数的结尾。但在另一种情况下,即代码与第一个代码完全相同,它也不会显示任何错误。有人可以告诉我,在编译器中,在两种情况下究竟发生了什么吗?
在第一种情况下,它显示错误:控制到达非void函数的结尾.但在第二种情况下,即使代码与第一个代码完全相同,它也不会显示任何错误.有人可以告诉我在编译器中两种情况下究竟发生了什么?
同样为什么案例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; } } //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语句(返回0和返回1只能在第一次迭代时发生).
情况2的最终返回1仅在循环之后发生,如果没有数组元素触发先前的退出.

