Mục đích ban đầu trong C ++ 98 là bạn nên sử dụng <cstdint>
trong C ++, để tránh làm ô nhiễm không gian tên chung (tốt, không phải <cstdint>
cụ thể, điều đó chỉ được thêm trong C ++ 11, nhưng các <c*>
tiêu đề nói chung).
Tuy nhiên, dù sao thì việc triển khai vẫn tiếp tục đưa các ký hiệu vào không gian tên chung và C ++ 11 đã phê chuẩn thực hành này [*]. Vì vậy, về cơ bản bạn có ba lựa chọn:
- Sử dụng
<cstdint>
và hoàn toàn đủ điều kiện cho mỗi kiểu số nguyên bạn sử dụng hoặc nếu không thì đưa nó vào phạm vi với using std::int32_t;
vv (khó chịu vì dài dòng, nhưng đó là cách đúng để làm điều đó giống như bất kỳ ký hiệu nào khác trong thư viện chuẩn C ++)
- Sử dụng
<stdint.h>
(hơi tệ vì không được dùng nữa)
- Sử dụng
<cstdint>
và cho rằng việc triển khai của bạn sẽ đặt các ký hiệu trong không gian tên chung (rất tệ vì không được đảm bảo).
Trong thực tế, tôi nghi ngờ rằng một lượng lớn mã gây phiền nhiễu sử dụng tùy chọn cuối cùng, đơn giản vì nó dễ thực hiện một cách tình cờ trên một triển khai nơi <cstdint>
đặt các ký hiệu trong không gian tên chung. Bạn nên thử sử dụng cái đầu tiên. Điều thứ hai có một đức tính, đó là đảm bảo đưa nội dung vào không gian tên chung thay vì chỉ có thể làm điều đó. Tôi không nghĩ điều đó đặc biệt hữu ích, nhưng nó có thể tiết kiệm một số thao tác nhập nếu đó là ưu tiên của bạn.
Có một tùy chọn thứ tư, #include <cstdint>
tiếp theo là tùy chọn using namespace std;
này đôi khi hữu ích nhưng có những chỗ bạn không nên đặt using namespace std;
. Những người khác nhau sẽ có những ý tưởng khác nhau về vị trí của những vị trí đó, nhưng "ở cấp cao nhất trong tệp tiêu đề" thì tệ hơn "ở cấp cao nhất trong tệp cpp", tệ hơn là "ở phạm vi hạn chế". Một số người không bao giờ viếtusing namespace std;
gì cả.
[*] Điều đó có nghĩa là các tiêu đề chuẩn C ++ được phép đưa nội dung vào không gian tên chung nhưng không bắt buộc. Vì vậy, bạn phải tránh va chạm với những biểu tượng đó, nhưng bạn không thể thực sự sử dụng chúng vì chúng có thể không ở đó. Về cơ bản, không gian tên toàn cục trong C ++ là một bãi mìn, hãy cố gắng tránh nó. Người ta có thể tranh luận rằng ủy ban đã phê chuẩn một thực tiễn bởi các triển khai gần như có hại như việc gắn using namespace std;
ở cấp cao nhất trong tệp tiêu đề - sự khác biệt là các triển khai chỉ thực hiện điều đó cho các ký hiệu trong thư viện chuẩn C, trong khi using namespace std;
đó đối với C ++ -chỉ là biểu tượng quá. Có một phần trong tiêu chuẩn C liệt kê các tên được dành cho các bổ sung trong tương lai cho tiêu chuẩn. Không phải là một ý tưởng hoàn toàn ngu ngốc khi coi những tên đó là dành riêng trong không gian tên chung của C ++, nhưng nó không phải là điều cần thiết.
<cstdint>
. Đây là lỗi tôi nhận được:./misc.h:7:10: fatal error: 'cstdint' file not found
.