在浏览一些C ++代码时,我遇到了以下几行:
for (int i = 0; i < count; i++) {
if (&array[i].GetData() == el)
break;
}
if (i < count) {
// .. Do something
}
我很惊讶地看到循环计数器变量i
可以在循环之外访问!
为了确保循环外的i
与循环内的i1
相同,我将循环变量名称更改为for (int i1 = 0; i1 < count; i1++) {
if (&array[i1].GetData() == el)
break;
}
if (i < count) { // COMPILATION ERROR: Identifier i is undefined
// .. Do something
}
。
if(i < count)
这导致行i
的编译错误:
标识符'i'未定义。
发生了什么事?这对于编译器错误来说太基础了。如果父作用域中有另一个{{1}},则不会出现编译错误。我错过了什么吗?我正在使用Visual Studio 2015。
答案 0 :(得分:9)
过去的Visual Studio具有延长使用寿命的功能。在@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE_LOCATION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
setUserLocation();
} else {
toast(getApplicationContext(),"You have cancelled location accessed request");
currentLoaction.setImageDrawable(getResources().getDrawable(R.drawable.location));
}
}
}
标准出现之前,for(...)构造中声明的变量的可访问性(来自普通C
行为的保留)。默认情况下,在旧项目中启用了此行为。
Microsoft意识到这种(针对C ++)非标准符合性行为可能是不合需要的,并且提供了C++98
编译器选项来控制此行为(最近默认启用此开关,恢复标准C ++一致性)。 / p>
检查/Zc:forScope
下的项目设置中是否设置了/Zc:forScope
- &gt; C++
骑手如果没有,请设置它。
注意:您还可以选择在那里设置Language
以明确启用非标准行为,以防您拥有依赖它的遗留代码。