为什么 c++ 不支持 for 循环中的多个初始值设定项
Why c++ does not support multiple initializers in for loop?
可能的重复项:
C++为什么我不能像这样写一个 for() 循环:for( int i = 1,双 i2 = 0;
为什么用 2 个循环变量在 C++ 中编写一个 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;
}
不编译,因为 for 循环初始值设定项块中有两个声明。
但是为什么?
如果你想在初始化中int
和double
两者,那么一种方法是定义一个匿名结构!是的,您也可以在for
循环中定义struct
。这似乎是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;
}
输出:
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
在线演示 : http://ideone.com/6hvmq
在C++语法中,不同的数据类型用;
( 如果不是函数)分隔。在循环for
,一旦找到;
,含义就会改变。即
for (<initializations>; <condition>; <next operation>)
其他原因可能是为了避免在已经复杂的语法中出现复杂性,此功能是不允许的。
如果要在循环作用域for
声明变量,则始终可以模拟这种情况:
int main()
{
{
double j = 3.0;
for (int i = 0; i < 10; i++, j+=0.1)
cout << i << j << endl;
}
return 0;
}
因为语法已经被采用。在变量声明/定义中,用逗号分隔会添加相同类型的新变量,而不是不同类型的新变量。该语法在for
循环中可用:
for ( std::vector<int>::const_iterator it = v.begin(), end = v.end();
it != end; ++it ) {
// do something here
}
相关文章:
- 为什么istream不支持右值提取
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 为什么C++不支持对未初始化变量进行智能分析?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 在 Ubuntu 18.04 上编译 GLSL 着色器时"不支持 GLSL 3.30"?
- 为什么联机C++ IDE 不支持"graphics.h"头文件?
- Clang编译器不支持aarch64-apple-darwin上的-fxray-instrument
- 为什么我的 clang 格式不支持 PPDirectiveIndentStyle 选项?
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 为什么不支持 Xcode 1.5?
- C++20 从括号中的值列表初始化聚合,不支持内部数组
- 为什么结构化绑定不支持可变数组?
- 您选择的 CPU 不支持 x86-64 指令集
- 将数据发送到多个客户端 UDP 时不支持地址族
- 缺少类型说明符 - 假定为 int.注意 c++ 不支持 default-int
- 瓦尔格林德"不支持arch_prctl选项"
- 错误:C4430:缺少类型说明符-假定为int.注意:C++不支持default-int
- 不支持 GLSL 330 内核
- 为什么Visual Studio 2019不支持用于减少Openmp的关键字"max"?