我在Mac OS和Redhat(g ++ 6.3.1)的文件“ test.cpp”中尝试了此操作: g ++ -Wall -Wextra -Wconversion -pedantic -o test test.cpp
#include <iostream>
int main()
{
int a = 777;
for (int k = 0; k < 2; ++k) {
a = 111; // external a
int a = 0; // internal a
for (int j = 0; j < 3; ++j) a += j + k;
std::cout << "internal a: " << a << std::endl;
}
std::cout << "external a: " << a << std::endl;
}
输出: 内部A:3 内部A:6 外部A:111
问题为什么要编译?我一直认为(超过20年)C ++中的范围界定规则非常严格(永远如此)。显然,在相同范围内存在两个类似命名的变量“ a”。该示例来自我在其中出错的真实代码。