在if 、switch、 while 和for语句的控制结构内定义的变量只在其结构内部可见,超出结构范围将变为未定义。
1 #include <iostream> 2 #include <vector> 3 4 using std::cout; 5 using std::endl; 6 7 std::vector<int> v = {1,2,3,4,5,6,7,8,9}; 8 9 10 int get_num() 11 { 12 return 1; 13 } 14 15 16 17 int main() 18 { 19 while (int i = get_num()) 20 cout << i << endl; 21 i = 0; 22 23 24 auto beg = v.begin(); 25 while (beg !=v.end() && *beg>=0) 26 { 27 ++beg; 28 } 29 if(beg == v.end()) 30 { 31 32 } 33 }
以上演示了在作用域外使用变量将会变成未声明。
但是如果有同学使用vs2003版本的话,会发现并不会报错。
这是编译器的bug,虽然有时候会被程序员利用。
原文地址:https://www.cnblogs.com/ChattyKu/p/9552138.html
时间: 2024-10-10 07:01:57