Tại sao constexpr phải tĩnh?
Sau khi đọc cái này và cái này, tôi vẫn cảm thấy bối rối về loại biểu hiện này:
static constexpr int = 0;
AFAIK, trong C ++:
staticđảm bảo địa chỉ bộ nhớ trong thời gian tồn tại cùng với toàn bộ quá trình thực thi và khởi tạo an toàn với các luồng đồng thờiconstexprđảm bảo đánh giá biên dịch thời gian là rvalue, có nghĩa là nó sẽ không có địa chỉ bộ nhớ
Họ trông mâu thuẫn với tôi. staticđảm bảo biến sẽ có địa chỉ bộ nhớ lâu dài trong khi constexprđảm bảo giả định ngược lại. Đáng ngạc nhiên, cuộc thảo luận trong liên kết đầu tiên đề cập đến điều này:
constexpr int x = 3;
const int* p = &x;
Làm thế nào chúng ta có thể lấy được địa chỉ bộ nhớ xnếu nó là một rvalue?
Bất cứ ai có thể giải thích nó? Cảm ơn trước
Trả lời
staticcó một số ý nghĩa. Trong các lớp (theo nhận xét của bạn), điều đó có nghĩa là thành viên được liên kết với lớp, chứ không phải một cá thể cụ thể (đối tượng) của lớp đó.
Đối với a constexpr, điều đó rất có ý nghĩa. Điều đó thường được khởi tạo bởi một giá trị được trình biên dịch biết đến chứ không phải từ các đối số ctor.