Maksud asli di C ++ 98 adalah agar Anda menggunakan <cstdint>
C ++, untuk menghindari pencemaran namespace global (yah, tidak <cstdint>
secara khusus, itu hanya ditambahkan di C ++ 11, tetapi <c*>
header secara umum).
Namun, implementasi tetap dilakukan dengan meletakkan simbol ke dalam namespace global, dan C ++ 11 meratifikasi praktik ini [*]. Jadi, pada dasarnya Anda memiliki tiga opsi:
- Gunakan
<cstdint>
dan baik sepenuhnya memenuhi syarat setiap jenis bilangan bulat yang Anda gunakan atau bawa ke ruang lingkup dengan using std::int32_t;
dll (mengganggu karena verbose, tapi itu cara yang tepat untuk melakukannya seperti untuk simbol lain di pustaka standar C ++)
- Gunakan
<stdint.h>
(sedikit buruk karena tidak digunakan lagi)
- Gunakan
<cstdint>
dan asumsikan implementasi Anda akan menempatkan simbol di namespace global (sangat buruk karena tidak dijamin).
Dalam praktiknya, saya menduga bahwa sejumlah besar kode yang mengganggu menggunakan opsi terakhir, hanya karena mudah dilakukan secara tidak sengaja pada implementasi di mana <cstdint>
meletakkan simbol di namespace global. Anda harus mencoba menggunakan yang pertama. Yang kedua memiliki satu keunggulan, yaitu dijamin untuk meletakkan barang-barang di namespace global daripada hanya mungkin melakukannya. Saya tidak berpikir itu sangat berguna, tetapi mungkin menghemat beberapa pengetikan jika itu prioritas Anda.
Ada opsi keempat, #include <cstdint>
diikuti oleh using namespace std;
yang terkadang berguna tetapi ada tempat yang tidak boleh Anda letakkan using namespace std;
. Orang yang berbeda akan memiliki ide yang berbeda di mana tempat-tempat itu berada, tetapi "di tingkat teratas dalam file header" lebih buruk daripada "di tingkat teratas dalam file cpp", yang lebih buruk daripada "dalam lingkup terbatas". Beberapa orang tidak pernah menulis using namespace std;
sama sekali.
[*] Artinya, header standar C ++ diizinkan untuk meletakkan barang-barang di namespace global tetapi tidak diharuskan. Jadi, Anda harus menghindari bertabrakan dengan simbol-simbol itu, tetapi Anda tidak dapat benar-benar menggunakannya karena mungkin tidak ada. Pada dasarnya, namespace global di C ++ adalah ladang ranjau, cobalah untuk menghindarinya. Orang mungkin berpendapat bahwa komite telah meratifikasi praktik dengan implementasi yang hampir sama berbahayanya dengan menempel using namespace std;
di tingkat atas dalam file header - perbedaannya adalah bahwa implementasi hanya melakukannya untuk simbol di pustaka standar C, sedangkan using namespace std;
melakukannya untuk C ++ simbol -hanya juga. Ada bagian dalam standar C yang mencantumkan nama yang dicadangkan untuk penambahan standar di masa mendatang. Bukan ide yang sepenuhnya bodoh untuk memperlakukan nama-nama itu sebagai yang dicadangkan di namespace global C ++ juga, tapi itu tidak penting.
<cstdint>
. Berikut kesalahan saya terima:./misc.h:7:10: fatal error: 'cstdint' file not found
.