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::movestd::forwardtercihen 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.

Ref ve out parametreleri arasındaki fa...
' 'git' ve 'git re...
Val arasındaki fark() ve text()...
onları aramak için nasıl xcode4 ve çer...
Pragma ve Önbellek-kontrol başlıkların...