Có cách nào để đạt được hành vi khác nhau của một hàm constexpr
trong giai đoạn biên dịch và khi chạy không?Xác định thực thi `constexpr` - trong quá trình biên dịch hoặc khi chạy?
xem xét ví dụ sau (sử dụng một tính năng lý thuyết từ D: static if
):
constexpr int pow(int base , int exp) noexcept
{
static if(std::evaluated_during_translation()) {
auto result = 1;
for(int i = 0 ; i < exp ; i++)
result *= base;
return result;
} else { // std::evaluated_during_runtime()
return std::pow(base , exp);
}
}
Nếu không, có cách nào để hạn chế constexpr
được thời gian biên dịch chỉ?
Nếu bạn sử dụng nó trong một [conext nơi biểu thức liên tục được yêu cầu thì nó sẽ được đánh giá tại thời gian biên dịch] (http://stackoverflow.com/a/25891133/1708801) –
Bạn có thể có may mắn với GCC-nội tại '__builtin_constant_p' ... – Deduplicator
@Docuplicator không phải là một tính năng được viết tài liệu rất tốt, ít nhất là lần cuối tôi nhìn nhưng tôi đặt mọi thứ tôi có thể tìm thấy trên đó trong [answer] (http://stackoverflow.com/a/24400015/ 1708801). –