Std arasındaki fark::ne hareket ve std::forward
Bu burada gördüm: Move Constructor calling base-class Move Constructor
Birisi açıklayabilir:
std::move
std::forward
tercihen bazı kod örnekleri ile arasındaki fark nedir?- Bu konuda kolayca düşünmeye nasıl ve ne zaman kullanılır
CEVAP
std::move
bir nesneyi alır ve onu geçici olarak (bir rvalue) tedavi etmek için izin verir. Semantik bir gereklilik olmasa da, genellikle bir işlev bir rvalue başvurusu kabul geçersiz hale gelecektir. std::move
, gördüğünüzde nesnesinin değerini sonradan kullanılması gerektiği anlamına gelir, ama yine de yeni bir değer atamak ve kullanmaya devam edebilirsiniz.
std::forward
tek kullanımlık bir durum var: değer kategorisi (lvalue veya rvalue) için arayan geçmek için kullanılır. şablon fonksiyon bir parametre (fonksiyon içinde) döküm Bu rvalue argümanlar rvalues olarak geçmesini sağlar ve lvalues olarak geçirilen lvalues, bir düzeni "mükemmel iletme." denir
9* *için:
void overloaded( int const &arg ) { std::cout << "by lvalue\n"; }
void overloaded( int && arg ) { std::cout << "by rvalue\n"; }
template< typename t >
/* "t &&" with "t" being template param is special, and adjusts "t" to be
(for example) "int &" or non-ref "int" so std::forward knows what to do. */
void forwarding( t && arg ) {
std::cout << "via std::forward: ";
overloaded( std::forward< t >( arg ) );
std::cout << "via std::move: ";
overloaded( std::move( arg ) ); // conceptually this would invalidate arg
std::cout << "by simple passing: ";
overloaded( arg );
}
int main() {
std::cout << "initial caller passes rvalue:\n";
forwarding( 5 );
std::cout << "initial caller passes lvalue:\n";
int x = 5;
forwarding( x );
}
Howard bahseder gibi, hem de bu iÅŸlevleri sadece baÅŸvuru türü için döküm olarak benzerlikler var. Ama bu özel kullanım durumları dışında rvalue baÅŸvuru atmalarını yararlılığı ™.9 kapsar), static_cast
doğrudan kullanmak ve ne yaptığını iyi bir açıklama yazmak gerekir.
Px, dp, arasındaki fark ve Android dip...
'dizi arasındaki fark ne ve dize?...
İÇ ve DIŞ birleşimler arasındaki fark...
Bir URI, URL ve URN arasındaki fark ne...
Aramak ve uygulamak arasındaki fark ne...