Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Biến C++ có thể vừa const vừa volatile không?

Có. Một biến C++ có thể vừa const vừa volatile.

Khi nào dùng?

  • Read-only hardware register: Thanh ghi chỉ đọc của phần cứng (ví dụ: bộ đếm timer, cờ trạng thái). Chương trình không ghi vào nó (const) nhưng giá trị thay đổi bởi phần cứng (volatile).
  • Output của thread khác: Vùng bộ nhớ được ghi bởi thread/hardware khác, thread hiện tại chỉ đọc.

Ví dụ

// Thanh ghi trạng thái chỉ đọc của hardware (địa chỉ cố định)
const volatile uint32_t* STATUS_REG = reinterpret_cast<uint32_t*>(0x40001000);

void checkStatus() {
    uint32_t status = *STATUS_REG;  // Luôn đọc thực từ địa chỉ, không cache
    if (status & 0x1) { ... }
}

Giải thích

  • const: Code của bạn không ghi vào địa chỉ này.
  • volatile: Giá trị có thể thay đổi bất cứ lúc nào bởi yếu tố bên ngoài (hardware, thread khác), trình biên dịch không được cache giá trị trong register.

Lưu ý: Thứ tự const volatile hoặc volatile const đều hợp lệ và tương đương.