Ben şaşırtıcı Aşağıdaki kod tamamen geçerli olduğunu bugün keşfetti (gcc 4.4.5) (parametresi ise blokta gölgelendirilmeyen). Eğer kabul etmeliysem, yeni değişkenin kendi bloğu içerisindeymiş gibi olduğunu anlayabildiğime emin olabilirim, bu yüzden dışarıdaki kodun geri kalanı parametreye hala erişebilir, böylece parametre gerçekten gölgelenmez. Ama yine de bana mantıklı gelmiyor, neden bunu geçersiz bir sözdizimi yapmıyoruz? Buna izin vermenin faydalarını görmüyorum ve aslında, bunun neden olduğu bir hatayı kazmak zorunda kaldım. Bu uzun bir işlevdi ve kendi değişkenimi, bir parametre ile aynı ada sahip olduğunu fark etmeden oluşturdum ve sonradan bazı kod satırları (aynı blok) o parametre değişkeni üzerinde bir bağımlılık var ve şimdi benim versiyonumu kullanıyorum. ve benim günümden bir saat geçiyor.İlginç vaka
Derleyicilerle ilgili çok yüzey bilgim var, bu yüzden birisi bana bu davranışın ardındaki hikayeyi anlatabilir mi? Bir karşılaştırma olarak, Java kodunda bu şekilde geçersizdir (yinelenen değişken).
Derleyicilerde uzman değil, ama argümanın bir int & ve "gölgelendirme" değişkeni olduğundan sadece buradaki döngüde olması gerektiğinden şüpheleniyorum. –
Ayrıca get_int (int i) 'yi denedim, farketmez – user1861088
"int i" nin kapsamı, bildirildiği bloktur. Bu, bloğun içindeki parametreyi gölgeler, ancak bunun dışında gölgelendirir. "Neden işlev yerine blok için bir kapsam oluşturuldu?" Cevap "Dil kuralları böyle der." Farklı diller farklı kurallar izler. Onları farklı kılan budur. –