Java、C和C中循环变量的类型限制++; 为什么java、C++和C++(也许其他语言也)不允许一个以上的循环变量类型?例如: for (int i = 0; i < 15; i++) for (int i = 0, variable = obj.operation(); i < 15; i++) { ... } for (int i = 0, long variable = obj.operation(); i < 15; i++) { ... }
同样,有人知道为什么会存在这种类型的限制吗?之所以存在这种限制,是因为您的需求非常不寻常,并且可以通过非常类似(而且只是稍微详细一点)的构造获得。如果您确实想这样做,Java支持匿名代码块来限制作用域:Java、C和C中循环变量的类型限制++; 为什么java、C++和C++(也许其他语言也)不允许一个以上的循环变量类型?例如: for (int i = 0; i < 15; i++) for (int i = 0, variable = obj.operation(); i < 15; i++) { ... } for (int i = 0, long variable = obj.operation(); i < 15; i++) { ... },java,c++,for-loop,scope,strong-typing,Java,C++,For Loop,Scope,Strong Typing,同样,有人知道为什么会存在这种类型的限制吗?之所以存在这种限制,是因为您的需求非常不寻常,并且可以通过非常类似(而且只是稍微详细一点)的构造获得。如果您确实想这样做,Java支持匿名代码块来限制作用域: public void method(int a) { int outerVar = 4; { long variable = obj.operation(); for (int i = 0; i < 15; i++) { ... } } } public v
public void method(int a) {
int outerVar = 4;
{
long variable = obj.operation();
for (int i = 0; i < 15; i++) { ... }
}
}
public void方法(int a){
int-outerVar=4;
{
长变量=对象操作();
对于(int i=0;i<15;i++){…}
}
}
只是猜测-在循环中声明“long variable”非常简单,而且由于Java旨在简化,设计者可能觉得没有必要添加对所需内容的支持。好吧,语法是(expr;expr;expr)的,不能在一个表达式中声明两个不同类型的变量。因此,它与循环变量没有太大关系。根据,for语句的初始化可以是一个经过计算和丢弃的语句表达式列表,也可以是一个单变量声明语句。变量声明语句可以声明多个变量,但它们都属于同一类型
所以你可以这样做:
for (int i = 0, variable = obj.operation(); i < 15; i++) { ... }
for(int i=0,variable=obj.operation();i<15;i++){…}
但在这种情况下,变量将被定义为int。@jsight是正确的,但我认为真正的原因是语法的简单性。假设Java允许在第一个逗号后添加类型或新变量名。由于Java不需要前向声明,逗号后面的标识符可以是一个新变量名,一个以前从未遇到过的类名称的现有类名。现在应该可以解决这个问题了,但是:
(IMO,语法复杂度是C语言的缺点之一,尤其是C++)。我在这两方面都做了大量的编码,但我仍然发现语法错误消息有时难以解码。
for (int i = 0; i < 15; i++)
for (int i = 0, variable = obj.operation(); i < 15; i++) { ... }
for (int i = 0, long variable = obj.operation(); i < 15; i++) { ... }
这本身就是非法的。逗号不会开始新语句。逗号前后的两部分都是一条语句的一部分。此语句正在声明和初始化int
变量列表。不管怎样,这就是行开头的int
标识符告诉编译器的。逗号后面的long
标识符是错误的,要声明不同类型的变量,必须启动一个新语句
由于不能在一条语句中声明两种不同类型的变量,因此必须在
for
初始值设定项之外声明其中一种。这将在每次迭代中确定变量的范围,而不是每次循环。正如Jesse所说,我对循环范围感兴趣。我不想在每次迭代中丢失变量值。不,这在Java中是合法的:for(inti=0,j=5;I