Storage classes in C++ are type specifiers that aid in defining the lifetime and visibility of variables and functions within a C++ program. C++ storage classes aid in determining the existence of a specific variable or function during the execution of a program.
Syntax:
storage_class var_data_type var_name;
Five different kinds of storage classes can be used in a C++ program.
In C++, the default storage class for all local variables is the automatic storage class. The auto keyword is used to declare the variable storage class. In C++, the automatic storage class can also be used for automatic data type deduction, and as such, it can be used when declaring a variable without specifying the data type.
#include <iostream>
using namespace std;
void autoStorageClass()
{
cout << "Demonstrating auto class\n";
// Declaring an auto variable
// No data-type declaration needed
auto a = 32;
auto b = 3.2;
auto c = "CODERZ";
auto d = 'Z';
// printing the auto variables
cout << a << " \n";
cout << b << " \n";
cout << c << " \n";
cout << d << " \n";
}
int main()
{
// To demonstrate auto Storage Class
autoStorageClass();
return 0;
}
Demonstrating auto class
32
3.2
CODERZ
Z
The register storage class in C++ utilizes CPU registers to store data to access data quickly in a function. The functionality of register variables is similar to automatic variables. The only difference is that the compiler tries to store the variable in the register instead of the memory if the registers are free. The compiler stores the register variables in the memory if no registers are free.
#include <iostream>
using namespace std;
void registerStorageClass()
{
cout << "Demonstrating register class\n";
// declaring a register variable
register char b = 'Z';
// printing the register variable 'b'
cout << "Value of the variable 'b'"
<< " declared as register: " << b;
}
int main()
{
// To demonstrate register Storage Class
registerStorageClass();
return 0;
}
Demonstrating register class
Value of the variable 'b' declared as register: Z
In C++, the static storage class is used to declare a variable that, once initialized, is not deallocated when it exits the scope. As a result, the variables do not lose their values within function calls because their lifetime is the entire program. It is useful in recursive calls because static variables are only initialized once within a function block and can be changed on each recursive call without being re-initialized.
#include <iostream>
using namespace std;
int staticF()
{
cout << "For static variables: ";
static int count = 0;
count++;
return count;
}
// Function containing non-static variables
// memory is destroyed
int nonStaticF()
{
cout << "For Non-Static variables: ";
int count = 0;
count++;
return count;
}
int main()
{
// Calling the static parts
cout << staticF() << "\n";
cout << staticF() << "\n";
;
// Calling the non-static parts
cout << nonStaticF() << "\n";
;
cout << nonStaticF() << "\n";
;
return 0;
}
For static variables: 1
For static variables: 2
For Non-Static variables: 1
For Non-Static variables: 1
When a variable or function is declared on a separate function block from the definition, the external storage class is used in C++. That is, a variable or function can be defined in one code block or even a file, then declared and used in another code block or file. The extern keyword tells the compiler that the variable or function is defined somewhere else.
#include <iostream>
using namespace std;
int x;
void externStorageClass()
{
cout << "Demonstrating extern class\n";
extern int x;
// printing the extern variables 'x'
cout << "Value of the variable 'x'"
<< "declared, as extern: " << x << "\n";
// value of extern variable x modified
x = 2;
cout
<< "Modified value of the variable 'x'"
<< " declared as extern: \n"
<< x;
}
int main()
{
// To demonstrate extern Storage Class
externStorageClass();
return 0;
}
Demonstrating extern class
Value of the variable 'x'declared, as extern: 0
Modified value of the variable 'x' declared as extern: 2
In C++, the mutable storage class is used to declare variables that will be changed in otherwise constant objects or classes. The mutable storage class has the same lifetime as the class and has local visibility. A mutable storage class’s initial value is a garbage value.
#include <iostream>
using std::cout;
class Test {
public:
int x;
mutable int y;
Test()
{
x = 4;
y = 10;
}
};
int main()
{
// t1 is set to constant
const Test t1;
// trying to change the value
t1.y = 20;
cout << t1.y;
// Uncommenting below lines
// will throw error
// t1.x = 8;
// cout << t1.x;
return 0;
}
20
Note: also read about Jump Statement in C++
If you like my post please follow me to read my latest post on programming and technology.
https://www.instagram.com/coderz.py/
https://www.facebook.com/coderz.py
Staying up to the mark is what defines me. Hi all! I’m Rabecca Fatima a keen learner, great enthusiast, ready to take new challenges as stepping stones towards flying colors.
Problem Statement: Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses. Example…
Given an integer A. Compute and return the square root of A. If A is…
Given a zero-based permutation nums (0-indexed), build an array ans of the same length where…
A heap is a specialized tree-based data structure that satisfies the heap property. It is…
What is the Lowest Common Ancestor? In a tree, the lowest common ancestor (LCA) of…