Örneğin, std::vector<int&> vec_int;
bu, C++ uygulamasında geçersiz görünüyor. Bu neden geçersiz?Neden bir kapsayıcı türün değer türü olarak referans türlerini kullanamıyorum?
cevap
Cevap, yukarıda chryspi isteğinize göre. Diğer yanıtlarda da belirtildiği gibi, referansları kendi başlarına bulunmayan referanslar olarak kullanamazsınız.
için başvuruları kullanabilir, ancak, ama boost::reference_wrapper<T>
yardımcı sınıfı kullanılarak:
typedef boost::reference_wrapper<int> intref;
std::vector<intref> v;
int i;
i = 9;
v.push_back (boost::ref (i)); // store &i
int& j = v[0];
j = 10;
//v[0].get() = 10;
std::cout << i << std::endl; // prints 10
doğrudan elemanı v[0]
düzenlemeyle bir örnek olarak koyun. Gerçek bir başvuru yerine bir boost::reference_wrapper<T>
aldığınız için biraz zor olduğundan (get()
yöntemini çağırmanız gerekir) dikkat edin.
belleğe göre güvenle işaretçileri depolamak için, benzer şekilde boost::shared_ptr
kullanabilirsiniz.
STL kapları varsayılan kurucu ile nesneleri inşa edebilmek gerekir. Bunu bir referansla yapamazsın. Bir referansın geçerli olduğu garanti edilir, bu nedenle her zaman atama ile başlatılmalıdır.
Onun yerine bir işaretçi kullanmak gerekir.
başka nedeni vardır için yeniden adlandırmak gerekir. Referanslar atanamaz. İnanıyorum ki :: std :: vector', içinde saklanan şeyin atanabilir olmasını gerektirir. – Omnifarious
İki not burada. Bir de referansları kapsayıcılarda saklamak için "destek" i kullanabilirsiniz. Ve işaretçiler hakkında, ayrıca güvenli bir şekilde saklamak için boost :: shared_ptr'. bellek ayırma. –
Atanabilirlik muhtemelen buradaki suçludur. AFAIK, kapsayıcılar, onu kullanan yöntemleri çağırmazsanız (örneğin, varsayılan ve benzerleriyle yeniden boyutlandır() '), varsayılan kurucu gerektirmez. – visitor
, dahili olarak, bir vector<T>
T
nesnelerin bir sırası depolamak için bir dizi kullanır. Kaynaklar nesne olmadığı için, referans dizisi diye bir şey yoktur (standartta 8.3.2 §5'e bakınız), dolayısıyla referans türleri vector
şablonunu parametrelemek için kullanılamaz.
Muhtemelen istediğiniz, std::vector<boost::shared_ptr<T> >
gibi akıllı işaretçiler veya boost::ptr_vector<T>
gibi özel bir işaretçi kabı vektörüdür.
- 1. Neden Swift'de genel bir türün alt sınıfını kullanamıyorum?
- 2. Liste referans türü olarak ArrayList?
- 3. AsyncMethodCaller'ı neden kullanamıyorum?
- 4. Neden System.Enum bir değer türü değil?
- 5. Türü yalnızca System.Type olarak biliniyorsa, türün varsayılan değeri nasıl alınır?
- 6. Neden çifti unordered_set/unordered_map anahtarı olarak kullanamıyorum?
- 7. Neden Python'da ttk kullanamıyorum?
- 8. Neden scipy.io'yu kullanamıyorum?
- 9. "ArrayList" içindeki değer türlerini kaydetme
- 10. Java'daki sarma sınıfı neden bir referans türü gibi davranmıyor?
- 11. Değer Tür Vs Referans Türü - Nesne Sınıfı C#
- 12. Neden bir anahtar deyiminde bir NSInteger kullanamıyorum?
- 13. Türetilmiş türün WCF
- 14. Değer Türü (Enum) ve Referans Türü Arasında Otomatik Eşleme Haritasını Can? (String)
- 15. Hata: ödünç değer referans
- 16. Pikaday takvimimi neden ayrı bir alanda kullanamıyorum?
- 17. Neden bir func'de kendini kullanamıyorum Swift
- 18. Neden operator.itemgetter'i çok işlemcili kullanamıyorum?
- 19. Neden korunan kurucuları pakette kullanamıyorum?
- 20. C++ atomic_load parametresinin türü referans yerine neden işaretçidir?
- 21. C# - Neden kullanma ifadesinde bildirilen bir sınıfı referans türü olarak geçemiyorum?
- 22. Bir değişkene neden farklı bir değer atayabilirim?
- 23. Adlandırılmış bir referans referansının türü nedir?
- 24. Neden Windows'da git birleştirme aracı olarak TortoiseMerge kullanamıyorum?
- 25. Dinamik olarak bir C# anonim türün özellik adını ayarlama
- 26. Dinamik dizili bir değeri değer türü olarak belirtebilir miyim?
- 27. Genel türlere ham türlerini atarken neden bir derleyici hatası almıyorsunuz?
- 28. Neden Çekirdek Veri varlığı için "açıklama" özelliğini bir öznitelik adı olarak kullanamıyorum?
- 29. OCaml: Neden bu operatör infix'i kullanamıyorum?
- 30. Genel kısıtlamalar: Referans veya değer türü olabilen Genel Eşitliği test edebilir miyim?
"Ben kullanamıyorum neden" bu ... – Philipp