Như chúng ta đã biết, mỗi biến có một kiểu dữ liệu. Để định nghĩa đầy đủ một biến, ngoài kiểu dữ liệu, chúng ta còn cần lớp lưu trữ (Storage Class). Để tìm hiểu về lớp lưu trữ (Storage Class) trong C++ là gì, bạn đọc cùng tham khảo bài viết dưới đây của Taimienphi.vn.
Mục Lục bài viết:
1. Lớp lưu trữ (Storage Class) trong C++
3. Lớp lưu trữ Register trong C++
4. Lớp lưu trữ static trong C++
Như Taimienphi.vn đã đề cập ở trên, để định nghĩa đầy đủ một biến, ngoài kiểu dữ liệu, chúng ta còn cần lớp lưu trữ (Storage Class).
Khi chúng ta không định nghĩa lớp lưu trữ, trình biên dịch sẽ tự động gán một lớp lưu trữ mặc định cho nó. Lớp lưu trữ của biến cung cấp các thông tin về vị trí lưu trữ của biến trong bộ nhớ, giá trị mặc định ban đầu, phạm vi và vòng đời của biến.
C++ hỗ trợ các lớp lưu trữ bao gồm auto, register, static, extern và mutable.
Lớp lưu trữ auto được sử dụng cho các biến cục bộ - biến chỉ hiển thị bên trong hàm được khai báo và sẽ biến mất ngay khi quá trình thực thi kết thúc. Nếu không được khởi tạo, các biến của lớp auto sẽ tự động gán các giá trị rác.
Dưới đây là ví dụ minh họa cách mà biến của lơp auto được khai báo:
int var; // by default, storage class is auto
auto int var;
Các biến của lớp register được lưu trữ trong thanh ghi CPU thay vì bộ nhớ, cho phép truy cập nhanh hơn.
Phạm vi của các biến là hàm cục bộ, trong đó hàm được định nghĩa và biến mất ngay khi quá trình thực thi kết thúc. Nếu không được khởi tạo, nó sẽ chứa các giá trị rác. Khai báo lớp register trong C++ có dạng như dưới đây:
register int var;
Phạm vi của biến static là hàm cục bộ mà hàm đó được định nghĩa nhưng không biến mất khi quá trình thực thi hàm kết thúc.
Giá trị của một biến static tồn tại giữa các lệnh gọi hàm. Giá trị mặc định ban đầu của biến static là 0. Chương trình dưới đây minh họa biến static trong C++:
Các biến của lớp lưu trữ Extern có phạm vi toàn cục. Chúng ta sử dụng các biến Extern nếu muốn biến hiển thị bên ngoài file đã được khai báo.
Vì vậy một biến extern có thể được chia sẻ trên nhiều file khác nhau. Biến extern vẫn tồn tại, miễn là chương trình tiếp tục được thực thi. Một biến static toàn cục chỉ hiển thị bên trong file mà nó được khai báo, nhưng một biến extern toàn cục được hiển thị trên tất cả các file của một chương trình.
Chúng ta có thể sử dụng khai báo và định nghĩa một biết có thể thay thế, nhưng lớp lưu trữ extern sẽ khác nhau.
Nói một cách đơn giản:
extern int count; // khai báo biến 'count'
int count; // định nghĩa biến 'count'
Khai báo và định nghĩa một biến trong các file khác nhau có thể khác nhau.
Cho ví dụ, chương trình dưới đây minh họa cách sử dụng lớp extern:
Trong chương trình trên, biến count được khai báo trong một file, file đó lại được định nghĩa trong một file khác. Biến count có thể được truy cập và sửa đổi trong các file bất kỳ và giá trị của nó được phản ánh trong cả 2 file.
Lớp lưu trữ mutable chỉ sử dụng cho các thành viên lớp dữ liệu. Lớp là kiểu dữ liệu do người dùng định nghĩa và đối tượng là biến của kiểu lớp.
Trong một chương trình, biến không thể sửa đổi được, tương tự các đối tượng cũng không thể sửa đổi. Nếu một thành viên dữ liệu của lớp được khai báo là mutable, tức là nó có thể sửa đổi được bởi một đối tượng được khai báo là constant.
Để dễ hình dung hơn, bạn đọc cùng tham khảo chương trình dưới đây:
Như vậy bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn về lớp lưu trữ (Storage Class) trong C++. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết khác đã có trên Taimienphi.vn để tìm hiểu rõ hơn về Modifier cũng như Constant và Literal trong C++, trong ngôn ngữ lập trình C,constant (hằng) là các giá trị "cố định", còn cácgiá trị không thể thay đổi trong chương trình chúng ta gọi là literal, bài viết về Constant và Literal trong C sẽ nói cụ thể về các hằng này để bạn hiểu rõ hơn.