Saya telah menemukan tata letak for-loop ini:
#include <iostream>
int main()
{
{
for (int i = 0; i != 10; ++i)
{
std::cout << "delete i->second;" << std::endl;
}
}
{
for (size_t i = 0; i < 20; ++i)
{
std::cout << "delete m_indices[i];" << std::endl;
}
}
return 0;
}
Saya bertanya-tanya untuk apa lapisan kawat gigi ekstra ini? Ini muncul beberapa kali di basis kode kami.
Jawaban:
Dahulu kala, beberapa bulan yang lalu, VS6 ada dan populer. Namun gagal untuk menyesuaikan dengan sejumlah standar C ++; yang wajar pada saat dirilis sebelum (pada tahun yang sama) standar resmi dirilis; Namun itu mematuhi draft standar sejauh yang saya tahu.
Salah satu standar yang berubah antara draf dan standar resmi, adalah masa pakai variabel loop yang dibuat di bagian pertama; mengarah ke kode berikut gagal dikompilasi
karena
i
didefinisikan ulang oleh perulangan for kedua.Sementara kompiler lain juga mengalami bug ini; Saya menyoroti VS6 karena itu tetap satu-satunya versi studio visual selama beberapa tahun setelah rilis standar, tetapi tidak pernah merilis pembaruan untuk edisi khusus ini; artinya memiliki dampak yang lebih signifikan.
Solusi untuk ini adalah dengan memaksa seluruh loop for ke dalam cakupannya sendiri seperti yang telah Anda tunjukkan.
sumber
{
dan}
akan membuat ruang lingkup dan jika Anda menentukan beberapa variabel dalam ruang lingkup Anda tidak dapat mengaksesnya dari luar. Tapifor
sudah buat ruang lingkup itu. Begitusama dengan
tetapi jika Anda mendefinisikan sesuatu di antara keduanya, ada perbedaan
Dalam contoh ini,
a
tidak akan dapat diakses dari luar ruang lingkup.sumber
Dalam contoh khusus Anda, tidak ada alasan untuk mereka.
Terkadang Anda mungkin ingin membuat ruang lingkup untuk variabel:
Namun saya melihat ini sebagai anti-pola. Biasanya jika Anda merasa perlu melakukan ini maka kemungkinan besar itu
for
harus menjadi fungsinya sendiri.sumber
Ini adalah lingkup blok yang ditandai dengan
{}
kawat gigi. Biasanya digunakan untuk menandai area penyimpanan otomatis . Dalam kasus Anda, tampaknya tidak melakukan apa pun karena loop for memiliki cakupannya sendiri dalam C ++ standar.sumber