2012-02-29 40 views
9

Như tôi đã hiểu, constexpr không phải là Turing hoàn toàn không giống như lập trình meta mẫu, vì vậy tôi tin rằng những điều này không giống nhau. Vậy câu hỏi đặt ra là ở mức độ nào constexpr làm cho quá trình lập trình meta mẫu lỗi thời?C++ 11 constexpr để lập trình meta mẫu lỗi thời?

+1

'constexpr' là Turing hoàn thành (bỏ qua các yêu cầu vô cực, rõ ràng). –

+0

@ R.MartinhoFernandes: Nếu 'constexpr' là Turing hoàn thành, hãy sử dụng chỉ' constexpr' để mô hình hóa một danh sách các số nguyên có thể phát triển ở cả hai đầu. – kennytm

+0

@ R.MartinhoFernandes: Bạn có thể thú vị khi đăng câu trả lời đó lên http://stackoverflow.com/questions/9201506/is-constexpr-based-computation-turing-complete. – kennytm

Trả lời

21

constexpr hoàn toàn là Turing-complete. Phép đệ quy được cho phép. Đây là một cách thuận tiện để định nghĩa các hàm hoạt động tại thời gian biên dịch cũng như thời gian chạy. Tuy nhiên, hàm constexpr chỉ là các hàm hoạt động. (Trừ khi bạn sử dụng lập trình meta mẫu để xác định hàm đã nói, tất nhiên.)

Cả hai mẫu lớp và constexpr có thể được sử dụng để chứa biểu thức hằng số biên dịch, nhưng có sự giống nhau kết thúc. Chúng không thừa và TMP sẽ không biến mất sớm.

Một số tính toán thời gian biên dịch đặc biệt xấu xí có thể được viết lại một cách thanh lịch hơn dưới dạng các hàm phù hợp.

+5

+1 để quan sát rằng 'constexpr' không thể hoạt động trên các loại. –

+0

Cảm ơn bạn đã giải thích nó rất tốt ... – polapts

Các vấn đề liên quan