Computer >> Máy Tính >  >> Lập trình >> C ++

Các lớp lưu trữ của các biến trong C ++ là gì?


Một lớp lưu trữ xác định phạm vi (khả năng hiển thị) và thời gian tồn tại của các biến và / hoặc hàm trong Chương trình C ++. Các chỉ định này đứng trước loại mà chúng sửa đổi. Có các lớp lưu trữ sau, có thể được sử dụng trong Chương trình C ++.

  • tự động
  • đăng ký
  • tĩnh
  • extern
  • có thể thay đổi

Trong C, Bộ chỉ định lớp lưu trữ tự động cho phép bạn khai báo rõ ràng một biến có lưu trữ tự động. Lớp lưu trữ tự động là lớp mặc định cho các biến được khai báo bên trong một khối. Một biến x có bộ nhớ tự động sẽ bị xóa khi khối trong đó x được khai báo thoát.

Bạn chỉ có thể áp dụng chỉ định lớp lưu trữ tự động cho tên của các biến được khai báo trong một khối hoặc cho tên của các tham số hàm. Tuy nhiên, những tên này theo mặc định có lưu trữ tự động. Do đó, tự động chỉ định lớp lưu trữ thường là dư thừa trong khai báo dữ liệu.

Ban đầu nó được chuyển sang C ++ chỉ để tương thích cú pháp, mặc dù sau đó nó có ý nghĩa riêng, loại trừ tự động.

Trong C, bộ chỉ định lớp lưu trữ thanh ghi chỉ ra cho trình biên dịch biết rằng đối tượng nên được lưu trữ trong một thanh ghi máy. Bộ chỉ định lớp lưu trữ thanh ghi thường được chỉ định cho các biến được sử dụng nhiều, chẳng hạn như biến điều khiển vòng lặp, với hy vọng nâng cao hiệu suất bằng cách giảm thiểu thời gian truy cập. Tuy nhiên, trình biên dịch không bắt buộc phải đáp ứng yêu cầu này. Do kích thước và số lượng thanh ghi có sẵn trên hầu hết các hệ thống hạn chế, một số biến thực sự có thể được đưa vào thanh ghi.

Lớp lưu trữ tĩnh hướng dẫn trình biên dịch giữ một biến cục bộ tồn tại trong thời gian tồn tại của chương trình thay vì tạo và phá hủy nó mỗi khi nó xuất hiện và đi ra khỏi phạm vi. Do đó, việc làm cho các biến cục bộ trở nên tĩnh cho phép chúng duy trì các giá trị của chúng giữa các lần gọi hàm.

Bộ chỉ định lớp lưu trữ bên ngoài cho phép bạn khai báo các đối tượng mà một số tệp nguồn có thể sử dụng. Một khai báo bên ngoài làm cho biến được mô tả có thể sử dụng được bởi phần tiếp theo của tệp nguồn hiện tại. Tuyên bố này không thay thế định nghĩa. Khai báo được sử dụng để mô tả biến được định nghĩa bên ngoài.

Bộ chỉ định lớp lưu trữ có thể thay đổi chỉ được sử dụng trên một thành viên dữ liệu lớp để làm cho nó có thể sửa đổi được mặc dù thành viên đó là một phần của đối tượng được khai báo là const. Bạn không thể sử dụng công cụ xác định có thể thay đổi với các tên được khai báo là tĩnh hoặc const, hoặc các thành viên tham chiếu.

Ví dụ

class A
{
   public:
   A() : x(4), y(5) { };
   mutable int x;
   int y;
};

int main()
{
   const A var2;
   var2.x = 345;
   // var2.y = 2345;
}

trình biên dịch sẽ không cho phép gán var2.y =2345 vì var2 đã được khai báo là const. Trình biên dịch sẽ cho phép gán var2.x =345 vì A ::x đã được khai báo là có thể thay đổi.