C++ türü önemsiz olarak kopyalanabilir olup olmadığını nasıl denetlerim? Memcpy ve memcmp işlevlerini belirtilen şablon T türünde kullanan bir sınıfım var ve memcpy ile kopyalamak için güvenli olmayan türler için itiraz etmek istiyorum. Bunu yapmak için herhangi bir yolu var mı (mevcut standart ile)?C++ is_trivially_copyable <a1> Çek</ a1>
cevap
Hayır, C++ 98/C++ 03'de mümkün değil. Bunun gibi şeyler C++ 0x'a neden <type_traits>
eklenmiştir. <type_traits>
'un bazı özellikleri, genellikle SFINAE ilkesini kullanarak C++ 03'te uygulanabilir, ancak std::is_trivially_copyable<T>
da dahil olmak üzere birkaç tanesi yerleşik derleyici desteği gerektirir.
Evet, bu benim de etkilendim. Teşekkürler. – axe
Bu işlem için çeşitli özellikler mevcut. Ancak, zaman harcamanızı ziyan ediyorsanız, bir tür, türünün tekdüze olarak kopyalanabiliyorsa, bir kopya yapıcı ile optimize edicinizin üreteceği hızdan daha hızlı olmayacaktır. Sadece kopya kurucuyu kullanın.
İyi nokta. (diğer karakter) – aschepler
Hangi tür özellikleri? is_pod tam olarak aradığım şey değil, çünkü Maxim'in neredeyse aynı olduğuna işaret etti. – axe
_However, zaman harcamanızı harcıyorsanız, bir tür, kopyalayıcıyı tekdüze kopyalanabilirse, bir kopya oluşturucu ile üretecinizden daha hızlı olmayacak bir türden daha hızlı olmayacaktır. Sadece ben kopya constructor._ kullanın performans için değil, ben sadece benim sınıfın önemsiz olmayan kopya kurucu ile türleri için çalışmak istemiyorum. Bütün ayrılmaz tipler için uzmanlaşabilirdim, ancak POD'lar için çalışmayacak. – axe
- 1. <a1> C</ a1>
- 2. MailboxProcessor <T> C#
- 3. Neden benim c! = 'O' || c! = 'x' koşulu her zaman doğru mu?</p> <pre><code>while (c != 'o' || c != 'x') { c = getANewValue(); } </code></pre> <p>Ben kadar çalıştırmak istiyorum:
- 4. coredump ben <pre><code>ulimit -c unlimited. </code></pre> <p>Ve c</p> kuruyorum
- 5. Netbeans/C++ <a1> çevre değişkeni</ a1>
- 6. C# <<int> T, ICollection>
- 7. C++ bir dizi için aşırı yüklenme operatörü << nasıl?
- 8. C# generics & delirmiyor <a0></ a0>
- 9. Saturate_cast <uchar>'u C++ 'da C++' ya dönüştürün
- 10. Vim in <C-x><C-o> yazımı nasıldır?
- 11. Ben C++ oluşturucu (BCB6)</p> <p>kullanıyorum * MessageBox C++ oluşturucu
- 12. std :: set <K, C> :: operatörü <(const std :: <K, C> & set) ... daha az()
- 13. C# Linq - örtük <string>
- 14. C# ListBox GözlemlenebilirKoleksiyon <T>
- 15. s, S veya c + <cr>
- 16. C# Liste <> GroupBy 2 Değerleri
- 17. C# Func <> ve jenerikler
- 18. C# Foreach</ a0> uygulamasında
- 19. Eclipse C++ kütüphanesinde -l <kütüphanesi bulunamadı
- 20. vector <int> :: size_type C++ içinde
- 21. C# List <T> Test içerir
- 22. XPath - tüm elemanlar alt elemanlara belge</p> <pre><code><a> <b> <c/> <d/> </b> <b> <c/> <d/> </b> </a> </code></pre> <p>Verilen
- 23. Git, <<<<<<< HEAD dosyasına
- 24. Ben iki işlevi <code>f</code> ve <code>g</code> sahip C++
- 25. C# nesnesine XML dizisi serileştirme
- 26. nasıl salt okunur için</p> <pre><code>TextBox.ReadOnly = false; </code></pre> <p>kullanıyorum C#
- 27. C# mongodb sürücüsü 2.2.3 nasıl MongoDB 2.2.3</p> <p>için ben resmi C# sürücüsü kullanıyorum imleç
- 28. Derleyici, strptime işlevini kullanırken uyarı alır (C)
- 29. C#/CLI:</p> Bu sınıf, bir C# sınıfı ile sarılır <pre><code>CTransferManaged::~CTransferManaged() { this->!CTransferManaged(); } CTransferManaged::!CTransferManaged() { //Clean up resources... } </code></pre> <p>adlı: Dispose() o
- 30. nasıl</p> <pre><code>f :: a -> b g :: b -> c h :: c -> d </code></pre> <p>Haskell
'is_pod' türünde bir özelliği kullanabilirsiniz. "Memcpy" ile kopyalamak için güvenli tanımınız nedir? Bir nesnenin, sahip olduğu dinamik olarak ayrılmış bir nesneyi işaret eden bir işaretçi veri üyesi varsa, "memcpy" ile kopyalamak güvenli midir? –
@James: Tanım, önemsiz kopyalama yapıcısıdır - yani, kullanıcının tanımlı bir kopya oluşturucusu yok, ya da böyle bir temel sınıf veya veri üyeleri. – Puppy
Standart "A kısaca kopyalanabilir bir sınıf bir sınıftır: - önemsiz olmayan kopya kurucular (12.8), vardır - önemsiz olmayan kopyalama atamaları operatörleri (13.5.3, 12.8), vardır - bir önemsiz yıkıcı (12.4). " – axe