Question:
In writing a basic introductory module about C++, I came upon the topic of “instant variable creation” within for loops and noticed to my dismay that the following code worked without errors:
for (int i = 0; i < 20; i++) { cout << "Hello World i == " << i << endl; } cout << i; //should produce an error?
In Java, the scope of i would have been limited to the loop itself. What's the deal? I'm using Microsoft's Visual C++ IDE, with the latest service pack installed.
Answer:
A standard compliant compiler should issue an error message in this case because the scope of i is limited to the for loop exclusively. However, in pre-standard C++ the scoping rules were different: the variable would remain in scope even after the for loop finished. Visual C++ still adheres to the older convention. This is a well known bug.