1. Static
static có 2 ngữ nghĩa:
#include <stdio.h>
static int a = 0;
static void count(int i)
{
static int num = 0;
num += i;
printf("current value of num: %d\n", num);
}
int main()
{
a += 1;
printf("value of a: %d\n", a);
count(1);
count(3);
return 0;
}
2. extern
Lớp lưu trữ tự động (Automatic Storage Class) gán một biến cho kiểu lưu trữ mặc định của nó. từ auto được sử dụng để khai báo biến tự động. Tuy nhiên, nếu một biến được khai báo mà không có bất kỳ từ khoá bên trong một chức năng, nó là tự động theo mặc định. Biến này chỉ hiển thị bên trong hàm mà nó được khai báo và thời gian sống của nó cũng giống như thời gian tồn tại của hàm. Một khi thực hiện chức năng hoàn thành, biến sẽ bị hủy.
VD ta có 2 file file1.c và file2.c
file1.c khai báo biến
static int b
int c
file2.c sẽ không dùng được biến khai báo static trong file1, còn biến c sẽ dùng được khi khai báo
extern int c;
3. auto
Lớp lưu trữ tự động (Automatic Storage Class) gán một biến cho kiểu lưu trữ mặc định của nó. từ auto được sử dụng để khai báo biến tự động. Tuy nhiên, nếu một biến được khai báo mà không có bất kỳ từ khoá bên trong một chức năng, nó là tự động theo mặc định. Biến này chỉ hiển thị bên trong hàm mà nó được khai báo và thời gian sống của nó cũng giống như thời gian tồn tại của hàm. Một khi thực hiện chức năng hoàn thành, biến sẽ bị hủy.
4. register
Lớp Register gán một bộ nhớ của biến trong các thanh ghi của CPU chứ không phải là bộ nhớ chính. Nó có thời gian tồn tại và khả năng hiển thị giống như biến tự động (Auto Class). Mục đích của việc tạo biến Register là tăng tốc độ truy cập và làm cho chương trình chạy nhanh hơn. Nếu không có không gian có trong Register, các biến này được lưu trữ trong bộ nhớ chính và hành động tương tự như các biến của lớp lưu trữ tự động. Vì vậy, chỉ có những biến cần truy cập nhanh nên được khai báo ở lớp Register.
register int id;
register char a;
5. Mutable
Trong C + +, một lớp đối tượng có thể được giữ liên tục một giá trị bằng cách sử dụng từ khoá const. Điều này không cho phép các hàm thay đổi giá trị của đối tượng trong quá trình thực hiện chương trình. Tuy nhiên, có những trường hợp khi một số dữ liệu của đối tượng hằng số này phải được thay đổi. Trong những trường hợp này, chúng ta có thể làm cho các biến này biến đổi được bằng cách sử dụng một lớp lưu trữ có thể thay đổi .
Thường dùng cho xây dựng các đối tượng trong oop
mutable int x;
mutable char y;
#include<iostream>
using namespace std;
class test
{
mutable int a;
int b;
public:
test(int x,int y)
{
a=x;
b=y;
}
void square_a() const
{
a=a*a;
}
void display() const
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
}
};
int main()
{
const test x(2,3);
cout<<"Initial value"<<endl;
x.display();
x.square_a();
cout<<"Final value"<<endl;
x.display();
return 0;
}
kết quả
Initial value
a = 2
b = 3
Final value
a = 4
b = 3
Vì b là dữ liệu thành viên bình thường, nên không có thể thay đổi giá trị của b khi khỏi tạo giá trị, tuy nhiên thành viên là là mutable nên có thể thay đổi giá trị