我可以在"for"循环中有两个初始化语句吗?
Can I have two initializing statements in a "for" loop?
在C++中,for
循环通常采用三个语句,形式为:
for (init; condition; step)
{
Loop statements
}
我可以在init
的位置放置两个或多个语句吗?假设我想定义两个起始变量,a
和 b
。为此,我会使用 int a = 1; int b = 5;
.但是,由于语句之间存在;
,因此C++int b = 5
解释为条件语句。有没有办法将整个语句压缩成init
,也许通过使用括号?可以为step
做类似的事情吗?
注意:我知道我可以在调用for
之前初始化变量。但是,我觉得将与循环相关的语句放在循环的定义中会更合乎逻辑。
不可以,您只能有一个初始化语句。但是,您经常可以使用逗号运算符来实现所需的结果:
for(int foo = 7, bar = 42; ...; ...) {
...
}
甚至
int foo;
double bar;
for(foo = 7, bar = 42; ...; ...) {
...
}
不可能在初始化语句中声明两个不同类型的变量:
//Illegal code!
for(int foo = 7, double bar = 42; ...; ...) {
...
}
请尝试for (int a =1, b=5; condition; a++,b++) {}
更新
并非一切都是可能的,但是可以通过调用内部函数来实现一些非常惊人的事情。
void bar() { /* some of the code you want */ }
int main(int argc, char **argv) {
int i = 0;
for(bar();i < 10; i++) {
// your stuff
}
}
如果您考虑使用 C++11,则可以在初始化变量的位置定义和调用未命名函数,如下所示:
int a = 0, b = 1;
for ([&a, &b]{ a = b++; b = foo(a); }(); b < 10; a++) {}
不过,我看不到这样做有任何好处。
有两个以上的初始化语句,只要你愿意,但用逗号分隔它们,
:
for(a=1, b=25, c='C', d=25.0; b>a; a++){
}
但是不能有多个声明语句,并且声明的变量必须在语句的第一个:
for(int a=1, b=25, c='C', d=25.0; b>a; a++){}
不:
for(a=1, int b=25, c='C', d=25.0; b>a; a++){} // wrong !
,,,
也可以有多个条件或指令,这是一个例子,后两个测试没有效果,只是为了演示:
int i;
for(char a='A', i=0; i<26 || a+i<='Z' && a+i>='A' ;i++ , printf("-") ){
printf("%c", a+i);
}
这将打印:A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-
,,,
祝你好运
for(<initialization> ; <condition> ; <increment/decrement variables>){}
变量的初始化和递增/递减可以用逗号分隔。 但是条件将是单一的,即我们不能有多个条件用逗号分隔。
e,g. for(i=1,j=2,k=3,l=4;j<6;k++,j--,++i,l++){}.
不能有多个初始化语句,其中声明了多个类型。但是,您可以使用以下技巧来模仿它:
for (struct { int a; char b; } i = {1, 'x'}; i.a < 15; ++i.a, ++i.b)
{
// ...
}
这样,您将使用未命名的结构来聚合各种类型的多个变量,是的,这是有效的C++。
用逗号分隔。
for(grunt, snarl; foo; goo) {
}
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- 轻松日志记录++如何避免多个初始化
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 两种初始化有什么区别:Foo f();Foo f = Foo()
- 声明一个模板函数,将模板类友元的两个对象(仅)带到这两个专用化
- 如何避免两步初始化
- 在外部功能中具有一个变量初始化或内部功能中的多个初始化是最有效的
- 这两个初始化之间有什么区别
- 这两种初始化成员变量的方法之间有区别吗?
- 对于具有两个模板化变量的模板化类,是否可以使一个 var 引用另一个 var
- 如何编写两个初始化操作(一个作为默认初始化,另一个作为用户输入)?两者都是类的构造函数C++
- 通过调用两个参数化的父类构造函数来构造继承的类
- 有没有办法区分来自两个模板化基类的这些函数调用
- 我可以在"for"循环中有两个初始化语句吗?
- 从数据类型调用构造函数(或任何函数/方法)而不经历两个模板化函数的任何类型的方法
- C++生成随机数时出现多个初始化错误
- OpenGL缓冲两次初始化
- 如何使两个模板化的类隐式地相互转换
- 如何修复多个声明和多个初始化错误
- 具有多个初始化的全局静态指针的用法