«move-semantics» etiketlenmiş sorular

12
Hareket semantiği nedir?
Scott Meyers ile C ++ 0x ile ilgili Yazılım Mühendisliği radyo podcast röportajını dinledim . Yeni özelliklerin çoğu bana mantıklı geldi ve aslında bir tane hariç, C ++ 0x hakkında heyecanlıyım. Hala hareket semantiği almıyorum ... Tam olarak nedir?

7
push_back vs emplace_back
Biraz arasındaki fark ile ilgili karıştı değilim push_backve emplace_back. void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); push_backBir rvalue referansı alan bir aşırı yük olduğundan , amacının ne olduğunu tam olarak göremiyorum emplace_back?


6
C ++ 11 rvalues ​​ve move semantik karışıklığı (return ifadesi)
Rvalue referanslarını anlamaya ve C ++ 11 semantiği taşımak çalışıyorum. Bu örnekler arasındaki fark nedir ve hangileri vektör kopyası yapmayacaktır? İlk örnek std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return tmp; } std::vector<int> &&rval_ref = return_vector(); İkinci örnek std::vector<int>&& return_vector(void) { std::vector<int> tmp {1,2,3,4,5}; return std::move(tmp); } std::vector<int> &&rval_ref = return_vector(); …

3
“Bu * için rvalue referansı” nedir?
Clang'ın C ++ 11 durum sayfasında "this * için rvalue referansı" adlı bir teklifle karşılaştım . Rvalue referanslarını biraz okudum ve anladım, ama bunu bildiğimi sanmıyorum. Ayrıca terimleri kullanarak web üzerinde çok fazla kaynak bulamadım. Sayfadaki teklif belgesine bir bağlantı var: N2439 (Hareket semantiğini * buna genişletme), ancak oradan da …

2
Modern C ++ size ücretsiz performans sağlayabilir mi?
Bazen C ++ 11 / 14'ün yalnızca C ++ 98 kodunu derlerken bile performans artışı sağlayabileceği iddia edilir. Gerekçe genellikle hareket semantiği çizgileri üzerindedir, çünkü bazı durumlarda rvalue kurucuları otomatik olarak üretilir veya şimdi STL'nin bir parçasıdır. Şimdi bu vakaların daha önce RVO veya benzer derleyici optimizasyonları tarafından gerçekten ele …

6
Neden std :: bir std :: shared_ptr taşıyayım?
Clang kaynak koduna bakıyordum ve şu pasajı buldum: void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = std::move(Value); } Neden isteyeyim std::movebir std::shared_ptr? Paylaşılan bir kaynakta sahipliği aktaran herhangi bir nokta var mı? Neden bunun yerine bunu yapmayayım? void CompilerInstance::setInvocation( std::shared_ptr<CompilerInvocation> Value) { Invocation = Value; }

2
Taşınan bir nesne ile ne yapabilirim?
Standart, bir nesne taşındıktan sonra ne yapabileceğimi kesin olarak tanımlıyor mu? Taşınan bir nesne ile yapabileceğiniz tek şeyin onu yıkmak olduğunu düşünürdüm, ama bu yeterli olmazdı. Örneğin, işlev şablonunu swapstandart kitaplıkta tanımlandığı gibi alın: template <typename T> void swap(T& a, T& b) { T c = std::move(a); // line 1 …

6
Bir std :: unique_ptr üyesiyle özel bir siliciyi nasıl kullanabilirim?
Unique_ptr üyesi olan bir sınıfım var. class Foo { private: std::unique_ptr<Bar> bar; ... }; Bar, create () işlevi ve destroy () işlevi olan üçüncü taraf bir sınıftır. Onunla std::unique_ptrbağımsız bir işlevde kullanmak isteseydim şunları yapabilirdim: void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } Bunu std::unique_ptrbir sınıfın …


4
C ++ 11'de bir yazı ne zaman taşınabilir hale getirilir?
Bunun arama sonuçlarımda görünmemesine şaşırdım, C ++ 11'deki hareket anlambiliminin kullanışlılığı göz önüne alındığında, birisinin bunu daha önce soracağını düşündüm: C ++ 11'de bir sınıfı ne zaman hareketsiz hale getirmeliyim (ya da bu benim için iyi bir fikir mi)? (Nedenleri diğer ise mevcut kodu ile uyumluluk sorunları daha.)

1
Ödünç alınan içerikten çıkarılamaz / paylaşılan bir referansın arkasından taşınamaz
Hatayı anlamıyorum cannot move out of borrowed content. Birçok kez aldım ve her zaman çözdüm, ama nedenini hiç anlamadım. Örneğin: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } şu hatayı üretir: error[E0507]: cannot move out of borrowed content --> src/main.rs:31:33 …

6
Atama operatörünü ve "if (this! = & Rhs)" öğesini taşıyın
Bir sınıfın atama operatöründe, genellikle atanan nesnenin çağıran nesne olup olmadığını kontrol etmeniz gerekir, böylece işleri batırmazsınız: Class& Class::operator=(const Class& rhs) { if (this != &rhs) { // do the assignment } return *this; } Taşıma atama operatörü için aynı şeye ihtiyacınız var mı? Hiç this == &rhsdoğru olabilecek bir …

3
Döngüler için menzil tabanlı olarak yönlendirme referansları kullanmanın avantajı nedir?
const auto&salt okunur işlemler yapmak istersem yeterli olur. Ancak, çarpıştım for (auto&& e : v) // v is non-const son zamanlarda birkaç kez. Bu beni meraklandırıyor: Bazı belirsiz köşe durumlarda, yönlendirme referanslarını kullanmanın auto&veya ile karşılaştırıldığında bazı performans faydaları olması mümkün müdür const auto&? ( shared_ptrbelirsiz köşe davaları için bir …

2
Std :: move () değerleri RV değerlerine nasıl aktarır?
Sadece mantığını tam olarak anlamadığımı fark ettim std::move(). İlk başta Google'da araştırdım, ancak std::move()yapısının nasıl çalıştığı değil, nasıl kullanılacağına dair belgeler var gibi görünüyor . Demek istediğim, şablon üye işlevinin ne olduğunu biliyorum ama std::move()VS2010'daki tanıma baktığımda hala kafa karıştırıcı. std :: move () tanımı aşağıdadır. template<class _Ty> inline typename …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.