Kami menggunakan tipe Integer mewakili variabel indeks sebagian besar waktu. Tetapi dalam beberapa situasi, kita terpaksa memilih
std::vector<int> vec;
....
for(int i = 0; i < vec.size(); ++i)
....
Ini akan menyebabkan kompiler untuk meningkatkan peringatan bahwa penggunaan campuran variabel yang ditandatangani / tidak ditandatangani. jika saya membuat variabel indeks sebagai for( size_t i = 0; i < vec.size(); i++ )
, (atau an unsigned int
) itu akan memilah masalah.
Ketika datang lebih spesifik untuk menggunakan jenis windows, sebagian besar Windows API berhadapan dengan DWORD (yang diketik lama sebagai unsigned).
Jadi ketika saya menggunakan iterasi yang sama, akan kembali menimbulkan peringatan yang sama. Sekarang jika saya menulis ulang sebagai
DWORD dwCount;
....
for(DWORD i = 0; i < dwCount; ++i)
....
Saya menemukan ini agak aneh. Mungkin masalah dengan persepsi.
Saya setuju bahwa kita seharusnya menggunakan jenis variabel indeks yang sama untuk menghindari masalah rentang dapat terjadi dengan variabel indeks. Misalnya, jika kita menggunakan
_int64 i64Count; //
....
for(_int64 i = 0; i < i64Count; ++i)
....
Tetapi dalam kasus DWORD, atau bilangan bulat tak bertanda, apakah ada masalah dalam penulisan ulang sebagai
for(int i = 0; (size_t)i < vec.size(); ++i)
Bagaimana sebagian besar orang bekerja dengan masalah serupa?
std::size_t
peringkatnya lebih tinggi dari int (atau bahkan panjang). Jika ukuran vektor melebihi std::numeric_limits<int>::max()
, Anda akan menyesal telah menggunakan int.