我遇到了一个必须交换某个对象的值的情况。由于我自己草率的复制和粘贴,我不小心也复制了类型声明。这是一个简化的示例:
int main()
{
int i = 42;
cout << "i = " << i++ << endl;
// ... much later
if( isSwapRequired == true )
{
int i = 24;
cout << "i = " << i++ << endl;
}
cout << "i = " << i++ << endl;
}
令我沮丧的是,编译器没有捕捉到这一点,而是继续让它i = 24
生活在自己的小范围内。后来,事实证明,在范围之外,i
仍然是43
. 我注意到如果两者i
处于同一级别,那么编译器会很乐意地捕捉到这个错误。编译器是否有理由以不同的方式处理多个声明?
如果重要的话,我正在使用 VS10。