Xin lưu ý rằng hầu hết các câu trả lời ở đây không phải là di động, vì các trình biên dịch ngày nay sẽ đánh giá các câu trả lời đó trong thời gian biên dịch (phụ thuộc vào việc tối ưu hóa) và trả về một giá trị cụ thể dựa trên một giá trị cụ thể, trong khi giá trị cụ thể của máy thực tế có thể khác. Các giá trị mà độ bền được kiểm tra sẽ không bao giờ đến được bộ nhớ hệ thống, do đó mã được thực thi thực sự sẽ trả về cùng một kết quả bất kể độ bền thực tế là bao nhiêu.
Ví dụ , trong ARM Cortex-M3, độ bền được triển khai sẽ phản ánh trong một bit trạng thái AIRCR.ENDIANNESS và trình biên dịch không thể biết giá trị này trong thời gian biên dịch.
Kết quả tổng hợp cho một số câu trả lời được đề xuất ở đây:
https://godbolt.org/z/GJGNE2 cho câu trả lời này ,
https://godbolt.org/z/Yv-pyJ cho điều này câu trả lời , v.v.
Để giải quyết nó, bạn sẽ cần sử dụng volatile
vòng loại. Yogeesh H T
's Câu trả lời là một trong những gần gũi nhất để sử dụng thực tế đời sống hiện nay, nhưng kể từ Christoph
gợi ý giải pháp toàn diện hơn, một sửa chữa nhỏ để mình câu trả lời sẽ làm cho câu trả lời đầy đủ, chỉ cần thêm volatile
vào union: static const volatile union
.
Điều này sẽ đảm bảo việc lưu trữ và đọc từ bộ nhớ, điều này cần thiết để xác định độ bền.