Tôi đã thử các biểu thức const được đánh giá tại thời điểm biên dịch. Nhưng tôi đã chơi với một ví dụ có vẻ cực kỳ nhanh khi được thực thi vào thời gian biên dịch.
#include<iostream>
constexpr long int fib(int n) {
return (n <= 1)? n : fib(n-1) + fib(n-2);
}
int main () {
long int res = fib(45);
std::cout << res;
return 0;
}
Khi tôi chạy mã này, mất khoảng 7 giây để chạy. Càng xa càng tốt. Nhưng khi tôi đổi long int res = fib(45)
sang const long int res = fib(45)
thì không mất một giây. Theo hiểu biết của tôi, nó được đánh giá tại thời gian biên dịch.
Nhưng quá trình biên dịch mất khoảng 0,3 giây
Làm thế nào trình biên dịch có thể đánh giá điều này nhanh như vậy, nhưng trong thời gian chạy thì mất nhiều thời gian hơn? Tôi đang sử dụng gcc 5.4.0.
fib
. Việc thực hiện các số Wikipedia bạn có ở trên là preeeeeetty chậm. Hãy thử lưu trữ các giá trị hàm trong mã thời gian chạy và nó sẽ nhanh hơn nhiều.