Yukarıdaki kodda, işaretli çizgi kaldırılırsa, bir segment hatası hatası olur, biri nedenini açıklayabilir mi?Aşırı yüklenen ostus operatörü segmentasyonu hatası endl
cevap
ostream& operator << (ostream &os, const foo &f) {
for (int i = 0; i < f.a.size(); ++i)
os << f.a[i] << " ";
os << endl; // why is this line a must?
}
manadatory değildir. Eğer ostream dönmemesi halinde tanımsız davranıştır os
ostream& operator << (ostream &os, const foo &f) {
for (int i = 0; i < f.a.size(); ++i)
os << f.a[i] << " ";
return os; // Here
}
dönen olmadığı için segfault kaynaklanır. endl
, os
ürününüzün burada yıkanıyor. Bu yüzden çalışıyor gibi görünüyor.
DÜZENLEME: Bu Bo Persson
os < < endl göre bu durumda çalışıyor Neden; aslında "geri dönüş değeri beklenen" (muhtemelen bir kayıt olması) yerleştirerek, tarafından os döndüren başka bir operatör çağrısıdır. Kod ana başka seviyesini döndürür , os referansı hala orada
kimsenin söz konusu kodunu kontrol etmek umurunda Neden
mi Hiçbir şey belirtilmediyse veya değeri bir şekilde standardize edilirse, iade edilen int (int) (?)? –
Burada hiçbir dolaylı int var. Oldukça açıkça 'ostream &' dönüşü olarak belirtilmiştir. Yani bir 'return' ifadesi olmadan, fonksiyondan sonra yığınta doğru yerde ne tür şeylerin olduğunu görürsünüz. Öyle ki, "os << endl" ile, bu çöplük bir çarpışmaya neden olmayan bir şeydir. – BoBTFish
@honk C++ 'da hiçbir dolaylı' int 'yoktur. 'Void' olmayan bir işlevden bir şey döndürmemek, yalnızca tanımlanmamış davranış, dönemdir. – Angew
- 1. Aşırı Yüklenen Dizeleri Kullanmak
- 2. Python'da aşırı yük() operatörü
- 3. Aşırı Yükleme operatörü Burada>
- 4. Özet sınıf aritmetik operatörü aşırı yükleme
- 5. C++ ve dereference'de aşırı yükleme operatörü
- 6. Şablon atama operatörü aşırı gizem
- 7. F # içinde aşırı yük operatörü: (/)
- 8. boost :: lexical_cast aşırı tanımıyor istream operatörü
- 9. C++ bir dizi için aşırı yüklenme operatörü << nasıl?
- 10. Düşük kontrast resim segmentasyonu
- 11. Neden C# destek operatörü aşırı yükleme yapmıyor?
- 12. İki enüm arasındaki yükleniciye aşırı yüklenme operatörü
- 13. dönüşüm operatörü aşırı yükleme belirsizliği, derleyiciler farklılıklar
- 14. Burada C++ operatörü aşırı yükleniyor mu?
- 15. C++ vektör segmentasyonu hatası ilk öğeye erişirken hata veriyor
- 16. operatörü << o çekmek veya dönmez ostream aşırı Nasıl
- 17. Filtre operatörü derleyici hatası atar
- 18. AWS Hatası: Aşırı hız aşıldı
- 19. C++ iostream endl fiyasko nedir?
- 20. belirsiz c 'operatörü =' ++ 11 std :: hamle için aşırı yük ve kopyalayıp takas deyim
- 21. Linq hatası - "NotSupportedException: Sorgu operatörü için kullanılan desteklenmeyen aşırı yük" Seç "
- 22. Aşırı yüklenen dizeleri yazarken boiler plakasını nasıl kaldırabilirim?
- 23. C#: Aşırı yüklenen yönteme null - hangi yöntem denir?
- 24. MSVC2015 aşırı yüklenen şablon işlevinde parametre türü belirtme
- 25. Aşırı yüklenmiş havuz operatörü silme işlemini nasıl bildiriyorsunuz?
- 26. Aşırı yükleme * operatörü hem sağ hem de solda çalışmak için
- 27. Kotlin güvenli aramasında aşırı yük çözünürlüğü hatası alıyorum
- 28. Aşırı yükleme akışı ekleme ve çıkarma işleci
- 29. Html.RenderPartial bana garip aşırı yükleme hatası veriyor?
- 30. C# genel türü için aşırı yükleme hatası
? Derleyici böyle hata hakkında size uyarmalıydım - "... uyarı: olmayan boşluk [-Wreturn tipi] dönen fonksiyonunda hiçbir Dönüş ifadesi" Bkz http://liveworkspace.org/code/2ygK20$1 } ^ – SChepurin