C ++ 20's std :: vector allow constexpr như thế nào?
Cho rằng nội dung và kích thước hiện tại của một vectơ có thể được xác định ngẫu nhiên trong thời gian chạy và tất cả nội dung sẽ phải bị hủy khi gọi lệnh, thì làm thế nào để hàm thành viên gán của C ++ 20 có thể là constexpr. thời gian biên dịch?
Trả lời
Tìm thấy câu trả lời của tôi ở đây . Để trích dẫn,
Là một hàm constexpr không có nghĩa là hàm được thực thi tại thời điểm biên dịch. Nó nói rằng hàm có khả năng chạy tại thời điểm biên dịch. Một hàm constexpr cũng có thể chạy thời gian chạy. Nó thường là một câu hỏi về trình biên dịch và mức độ tối ưu hóa nếu một hàm constexpr chạy trong thời gian biên dịch hoặc thời gian chạy.
Ergo, không giống như các biến constexpr, phải có thể xác định được tại thời điểm biên dịch, một lệnh gọi của một hàm constexpr nhất định có thể chạy tại thời điểm biên dịch, phụ thuộc vào hoàn cảnh gọi (ví dụ: a constexpr std :: vector) và một lệnh khác trong thời gian chạy (ví dụ: a non-constexpr std :: vector).