Jic*_*hao 14 c++ programming-languages for-loop language-lawyer
可能重复:
在C++中为什么我不能像这样编写for()循环:for(int i = 1,double i2 = 0;
为什么在C++中使用2个循环变量编写for循环是如此"难" ?
#include <iostream>
using namespace std;
int main()
{
for (int i = 0, double j = 3.0; i < 10; i++, j+=0.1)
cout << i << j << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不编译,因为for循环初始化程序块中有两个声明.
但为什么?
Naw*_*waz 46
如果你想要int和double两者一样,在初始化中,那么一种方法是定义一个匿名结构!是的,您也可以struct在for循环中定义.它似乎是一个鲜为人知的C++特性:
#include <iostream>
int main()
{
for( struct {int i; double j;} v = {0, 3.0}; v.i < 10; v.i++, v.j+=0.1)
std::cout << v.i << "," << v.j << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0,3
1,3.1
2,3.2
3,3.3
4,3.4
5,3.5
6,3.6
7,3.7
8,3.8
9,3.9
Run Code Online (Sandbox Code Playgroud)
在线演示:http://ideone.com/6hvmq
iam*_*ind 17
在C++语法中,不同的数据类型用;(如果不是函数)分隔.在for循环中,一旦;找到,意义就会改变.即
for (<initializations>; <condition>; <next operation>)
Run Code Online (Sandbox Code Playgroud)
其他原因可能是为了避免已经复杂的语法的复杂性,不允许使用此功能.
如果要在for循环范围中声明变量,则可以始终模拟该情况:
int main()
{
{
double j = 3.0;
for (int i = 0; i < 10; i++, j+=0.1)
cout << i << j << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*eas 10
因为已经采用了语法.在变量声明/定义中,用逗号分隔会添加相同类型的新变量,而不是不同类型的变量.该语法在for循环中可用:
for ( std::vector<int>::const_iterator it = v.begin(), end = v.end();
it != end; ++it ) {
// do something here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17490 次 |
| 最近记录: |