2014-11-14 23 views
13

Tôi biết rằng C++ 11 cho phép chỉ định biểu thức cho thời gian biên dịch thay vì thời gian chạy bằng cách sử dụng constexpr.Khi nào thì thiết lập hàm khởi tạo là constexpr?

Tôi biết rằng điều này có thể được thực hiện cho nhà xây dựng của một lớp học. Tuy nhiên, hàm khởi tạo này phải khởi tạo tất cả các thành viên của lớp, để được sử dụng như một constexpr (trong thời gian biên dịch), và bất kỳ hàm nào mà nó gọi cũng nên được đánh dấu là constexpr.

Nhưng khi nào một người thiết lập hàm tạo của mình thành một constexpr và có lợi ích nào khác ngoài việc tối ưu hóa nhỏ không?

Điều đó có nghĩa là, nếu tôi CÓ THỂ, tôi nên LUÔN thiết lập hàm tạo của tôi là constexpr?

+0

Có thể có thể sử dụng nhiều đối tượng 'constexpr' làm tăng thời gian biên dịch. Và đó là * không * nói rằng nó không bao giờ đáng giá. – Snps

Trả lời

12

Bằng cách tạo hàm tạo constexpr, bạn cho phép người dùng tạo các đối tượng constexpr và sử dụng chúng trong các biểu thức liên tục của riêng chúng. Điều này làm cho lớp thân thiện hơn trong một số trường hợp; ví dụ, khi lập trình cho một hệ thống nhúng nơi bạn muốn đặt dữ liệu vào bộ nhớ chỉ đọc nếu có thể.

Vì vậy, từ quan điểm làm cho lớp học trở nên linh hoạt và thường hữu ích nhất có thể, bạn nên làm như vậy nếu có thể.

+0

Bạn chỉ có thể khai báo một hàm tạo 'constexpr' nếu các thành viên lớp có thể được khởi tạo là' constexpr' không? –

+0

@GiovanniBotta: Đúng vậy. –

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