在浏览一些C++代码时,我遇到了以下几行:
for (int i = 0; i < count; i++) {
if (&array[i].GetData() == el)
break;
}
if (i < count) {
// .. Do something
}
Run Code Online (Sandbox Code Playgroud)
我很惊讶地看到循环计数器变量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
}
Run Code Online (Sandbox Code Playgroud)
这导致该行的编译错误if(i < count):
标识符'i'未定义.
到底是怎么回事?这对于编译器错误来说太基础了.如果i父作用域中有另一个,则不会出现编译错误.我错过了什么吗?我正在使用Visual Studio 2015.
过去,Visual Studio具有扩展for(...)构造中声明的变量的生命周期和可访问性的功能(C在C++98标准生成之前从普通行为中保留).默认情况下,在旧项目中启用此行为.
Microsoft意识到这(对于C++)非标准符合行为可能是不合需要的,并提供了/Zc:forScope编译器选项来控制此行为(最近默认情况下启用此开关,恢复标准C++一致性).
检查是否在- > rider /Zc:forScope下的项目设置中设置了.如果没有,请设置它.C++Language
注意:/Zc:forScope-如果您具有依赖于它的遗留代码,您还可以选择设置此处以显式启用非标准行为.
| 归档时间: |
|
| 查看次数: |
387 次 |
| 最近记录: |