2016-03-18 25 views
7

Để đo thời gian thực hiện của một hàm, tôi có thể sử dụng cả hai. Nhưng sự khác nhau giữa việc sử dụng <chrono><ctime> là gì? Tôi có nên thích cái này thay vì cái khác không?Sự khác nhau giữa <chrono> và <ctime> là gì?

+3

Giây so với nano giây? Khả năng sử dụng hiện đại so với khả năng sử dụng bán cổ xưa? –

+4

Thay đổi lớn về tư tưởng sau 40 năm sử dụng. – user4581301

Trả lời

6

ctime là tiêu đề kiểu C, cũ, không an toàn và không chính xác như chrono. chrono là tùy chọn ưa thích trong C++; Đó là một tiêu đề C++ hiện đại, nó an toàn, chính xác như phần cứng của chúng ta cho phép, nó có chức năng mở rộng, và quan trọng hơn, nó theo logic C++ (chứ không phải C) sao cho những thứ nhất định sẽ tự nhiên/biểu cảm hơn. chúng ta có thể mong đợi nó nhận thức được nhiều tính năng ngôn ngữ đương đại (chủ đề, ngoại lệ, vv) - chúng ta không thể đưa ra giả định tương tự cho ctime.

Điều đó nói rằng, vẫn còn một số trường hợp sử dụng cho ctime (hoặc thậm chí time.h), ví dụ: khi chúng ta cần nói chuyện với một số API C hoặc khi chúng ta dựa vào các cơ sở mã cũ hoặc khi chúng ta sử dụng một số thư viện theo một loại logic khác. C++ được thiết kế thực dụng và không phải là "thuần khiết" trong mọi khía cạnh; đây là lý do tại sao ctime và tất cả các loại tiêu đề cổ, cú pháp và các tính năng ngôn ngữ vẫn còn ở đó ngay cả khi các lập trình viên không được khuyến khích sử dụng chúng.

5

ctime là trường học cũ. Việc sử dụng duy nhất của nó bây giờ là một giải pháp crap để lấy ngày từ các điểm thời gian (vì C++ không có một thư viện datetime chuẩn đầy đủ). Đối với nhu cầu thời gian chung, hãy sử dụng chrono. Nếu bạn cần bật system_clock::time_point vào ngày/giờ, hãy sử dụng ctime.

+3

Chỉ cần tự hỏi tại sao 'ctime' là một giải pháp crap? –

+5

Cách tốt hơn so với 'ctime' để rẽ 'system_clock :: time_point' thành cấu trúc ngày/giờ của trường: http://howardhinnant.github.io/date_v2.html :-) –

+4

@YeeLiu:' ctime' không phải là "loại an toàn". Ví dụ 'difftime' trả về' double' thay vì 'duration'. Và 'tm.tm_sec' có kiểu' int' thay vì gõ 'giây'. Sự thiếu an toàn kiểu này có nghĩa là trình biên dịch không thể kiểm tra các lỗi logic (ví dụ) thực hiện đại số vô lý trên các đơn vị thời gian. –

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