C++ Tutorial/Language Basics/block scope variable
Содержание
- 1 global and block scope
- 2 global variables across functions
- 3 Inner block variable scope
- 4 Names in inner scopes can hide names in outer scopes.
- 5 scope code block
- 6 Using the scope resolution operator: "::"
- 7 Using the scope resolution operator (2)
- 8 Variable block scope
- 9 Variables can be local to a block
global and block scope
<source lang="cpp">#include <iostream.h> int n=0; //Global main() {
int n = 1; { int n = 2 ; { int n = 3; cout << "In inner n=" <<n<<endl; cout << "Global n=" << ::n <<endl; } cout << "In outter n=" <<n<<endl; cout << "Global n=" <<::n<<endl; } cout << "In main() n=" << n<<endl; return 0 ;
}</source>
In inner n=3 Global n=0 In outter n=2 Global n=0 In main() n=1
global variables across functions
<source lang="cpp">#include <iostream> using namespace std; int glob = 10; // global variable void access_global(); void hide_global(); void change_global(); int main() {
cout << "In main() glob is: " << glob << "\n\n"; access_global(); hide_global(); cout << "In main() glob is: " << glob << "\n\n"; change_global(); cout << "In main() glob is: " << glob << "\n\n"; return 0;
} void access_global() {
cout << "In access_global() glob is: " << glob << "\n\n";
} void hide_global() {
int glob = 0; // hide global variable glob cout << "In hide_global() glob is: " << glob << "\n\n";
} void change_global() {
glob = -10; // change global variable glob cout << "In change_global() glob is: " << glob << "\n\n";
}</source>
Inner block variable scope
<source lang="cpp">#include <iostream> using namespace std;
int main() {
int i; int j; i = 10; j = 100; if(j > 0) { int i; // this i is separate from outer i i = j / 2; cout << "inner i: " << i << "\n"; } cout << "outer i: " << i << "\n"; return 0;
}</source>
inner i: 50 outer i: 10
Names in inner scopes can hide names in outer scopes.
<source lang="cpp">#include <iostream>
- include <ostream>
int main() {
for (int i = 0; i < 10; ++i) { int x = 2; if (x < i) { double x = 3.4; std::cout << x; } std::cout << x; } //std::cout << x; // Error: no x declared in this scope
}</source>
2223.423.423.423.423.423.423.42
scope code block
<source lang="cpp">#include <iostream> using namespace std; void func(); int main() {
int var = 5; cout << "In main() var is: " << var << "\n\n"; func(); cout << "Back in main() var is: " << var << "\n\n"; { cout << "In main() in a new scope var is: " << var << "\n\n"; cout << "Creating new var in new scope.\n"; int var = 10; cout << "In main() in a new scope var is: " << var << "\n\n"; } cout << "At end of main() var is: " << var << "\n"; return 0;
} void func() {
int var = -5; // local variable in func() cout << "In func() var is: " << var << "\n\n";
}</source>
Using the scope resolution operator: "::"
<source lang="cpp">#include <iostream> using std::cout; using std::endl; int count1 = 100; int main() {
int count1 = 10; int count3 = 50; cout << endl << "Value of outer count1 = " << count1; cout << endl << "Value of global count1 = " << ::count1; { int count1 = 20; int count2 = 30; cout << endl << "Value of inner count1 = " << count1; cout << endl << "Value of global count1 = " << ::count1; count3 += count2; } cout << endl << "Value of outer count1 = " << count1 << endl << "Value of outer count3 = " << count3; cout << endl; return 0;
}</source>
Value of outer count1 = 10 Value of global count1 = 100 Value of inner count1 = 20 Value of global count1 = 100 Value of outer count1 = 10 Value of outer count3 = 80
Using the scope resolution operator (2)
<source lang="cpp">#include <iostream>
- include <ostream>
namespace n {
struct counter { static int n; }; double n = 2.8;
} int n::counter::n = 7; int main() {
int counter = 0; int n = 10; std::cout << n::counter::n; std::cout << n::n; std::cout << x.n; std::cout << n; std::cout << counter;
}</source>
Value of outer count1 = 10 Value of global count1 = 100 Value of inner count1 = 20 Value of global count1 = 100 Value of outer count1 = 10 Value of outer count3 = 80
Variable block scope
<source lang="cpp">#include <iostream> using std::cout; using std::endl; int main() {
int count1 = 10; int count3 = 50; cout << endl << "Value of outer count1 = " << count1; { int count1 = 20; int count2 = 30; cout << endl << "Value of inner count1 = " << count1; count1 += 3; count3 += count2; } cout << endl << "Value of outer count1 = " << count1 << endl << "Value of outer count3 = " << count3; cout << endl; return 0;
}</source>
Value of outer count1 = 10 Value of inner count1 = 20 Value of outer count1 = 10 Value of outer count3 = 80
Variables can be local to a block
<source lang="cpp">#include <iostream> using namespace std;
int main() {
int x = 19; // x is known to all code. if(x == 19) { int y = 20; cout << "x + y is " << x + y << "\n"; } // y not known here. return 0;
}</source>
x + y is 39