2013-03-27 31 views
7

Các cân nhắc để bao gồm yếu tố cũ hơn là sau này trong chương trình C++ là gì? Tôi luôn luôn bao gồm math.h, stdlib.h và không bao giờ cmath, cstdlib vv. Tôi không hiểu lý do thứ hai còn tồn tại, ai đó có thể vui lòng khai sáng cho tôi không?#include <cmath> vs #include <math.h> trong chương trình C++

+0

Đánh dấu chính xác câu trả lời cho câu hỏi của bạn. –

+0

Có thể trùng lặp nhiều hơn có liên quan so với những người đã được liệt kê: http://stackoverflow.com/questions/8734230/math-interface-vs-cmath-in-c –

+0

@ChrisWhite: thực sự. Cảm ơn. –

Trả lời

19

Thích bao gồm các tiêu đề <c ...>. Chúng là các tiêu đề thư viện chuẩn của C++. Các tiêu đề <... .h> là tiêu đề được xác định bởi thư viện chuẩn C:

Thư viện chuẩn C++ cũng có sẵn các cơ sở của thư viện chuẩn C, được điều chỉnh phù hợp để đảm bảo an toàn loại tĩnh.

Các tiêu đề C++, phần lớn, có nội dung giống với các tiêu đề thư viện C tương ứng ngoại trừ các tên đều được xác định trong không gian tên std.

Trừ như đã nêu tại các khoản 18 đến 30 và Phụ lục D, nội dung của mỗi tiêu đề cname sẽ là tương tự như của tiêu đề tương ứng name.h, theo quy định tại các thư viện C chuẩn (1.2) hoặc C Unicode TR, nếu thích hợp, như thể bao gồm. Tuy nhiên, trong thư viện chuẩn C++, các khai báo (ngoại trừ các tên được định nghĩa là các macro trong C) nằm trong phạm vi không gian tên (3.3.6) của không gian tên std. Nó không được chỉ định cho dù những tên này lần đầu tiên được khai báo trong phạm vi không gian tên toàn cầu và sau đó được đưa vào không gian tên bằng cách khai báo sử dụng rõ ràng

+0

Vì vậy, trên thực tế không có lý do thực sự nào để sử dụng các tiêu đề ''? Không gian tên 'std' là một sự bất tiện. –

+5

@VioletGiraffe Có lẽ bạn đã đọc sai. Tôi đã nói "Thích bao gồm các tiêu đề' '." Không gian tên 'std' giúp bạn tránh ô nhiễm tên. Các tiêu đề C++ cũng có một số thay đổi làm cho chúng hữu ích hơn cho C++. –

+0

Tôi không hiểu sai. Tôi không thấy một lý do duy nhất nào để thích tiêu đề '' ngay bây giờ. –

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