我可以在for循环的初始表达式中有不同的类型吗?
Can I have different types in the init-expression of a for loop?
以下代码将无法编译:
#include <iostream>
int main(){
for (int i = 0, double j = 0; i < 10; ++i, j+=.1){
std::cout << i << " " << j << 'n';
}
return 0;
}
是否有可能初始化两个不同的类型,或者我需要创建一个结构/对/等?
No。
但是你可以在这里定义一个匿名结构体:
for (struct { int i; double j; } x = {0,0}; x.i < 10; ++x.i, x.j+=.1)
{
std::cout << x.i << " " << x.j << 'n';
}
见初始化部分:
struct { int i; double j; } x = {0,0};
它定义了一个匿名结构体,然后创建了一个对象x
,用{0,0}
初始化它,用0
初始化成员i
和j
。
不可能,但有办法:
double var1;
int var2;
for (var2 = 0,var1 = 0.0; var2 < 12; var2++){}
如果想限制f和i的作用域,那么就像
一样将它们括在{}中{
double var1;
int var2;
for (var2 = 0,var1 = 0.0; var2 < 12; var2++){}
}
不行。您可以有多个变量,但它们必须是相同的类型。
它们必须是相同的类型,但是您可以使用结构体来绕过它。
for (struct {int j; char i;} loop = {0, 'e'}; loop.i < 33; ++loop.j, ++loop.i)
{
std::cout << loop.i << 'n';
}
可以做以下操作
#include<cstdlib>
#include<iostream>
int main(int argc, char *argv[]){
int i; double j;
for(i = 0, j = 0; i < 10; ++i, j+= .1){
std::cout << i << " " << j << 'n';
}
return EXIT_SUCCESS;
}
相关文章:
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 表观调用前面的表达式必须具有指向 func 类型的指针
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- 表达式必须具有类类型 vs.
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 非类类型表达式的静态类型与动态类型之间的差异
- 如何确定涉及 C++ 中除法的算术表达式的数据类型
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 带有数组类型表达式的错误分配
- 表示函数参数的元组的类型表达式
- 如何确定撤销类型表达式的更大类型
- c++ 11中有新的函数类型表达式格式吗?