«rvalue-reference» etiketlenmiş sorular

Bir rvalue referansı, C ++ 11'de bir rvalue için bir referansı temsil eden yeni bir dil özelliğidir. Referans daraltma ile birlikte, taşıma anlamlarını ve mükemmel iletmeyi uygulamak ve etkinleştirmek için kullanılırlar.

4
C ++ 11'de T&& (çift ve işareti) ne anlama geliyor?
C ++ 11'in yeni özelliklerinden bazılarına baktım ve fark ettiğim, değişkenleri bildirmede çift ve işareti T&& var. Başlangıç ​​olarak, bu canavara ne denir? Keşke Google bunun gibi noktalama işaretlerini aramamıza izin verseydi. Tam olarak ne anlama geliyor? İlk bakışta, çift referans gibi görünüyor (C tarzı çift işaretçiler gibi T** var), …

6
Std :: forward kullanmanın temel amaçları nelerdir ve hangi sorunları çözer?
Mükemmel iletmede, std::forwardadlandırılmış değer referanslarını t1ve t2adlandırılmamış değer referanslarına dönüştürmek için kullanılır . Bunu yapmanın amacı nedir? Bu nasıl denir fonksiyonu etkileyecek innerGidersek t1& t2SolDeğerler olarak? template <typename T1, typename T2> void outer(T1&& t1, T2&& t2) { inner(std::forward<T1>(t1), std::forward<T2>(t2)); }

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(); …

6
Lambda'da yakalama
Bir C ++ 11 lambda'da hareketle (rvalue referansı olarak da bilinir) nasıl yakalayabilirim? Ben böyle bir şey yazmaya çalışıyorum: std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [std::move(myPointer)]{ *myPointer = 4; };



1
Variadic bir fonksiyondaki tüm argümanlarda std :: forward nasıl çağrılır?
Ben sadece genel bir nesne fabrikası yazıyordum ve değişken bir şablon oluşturmak için boost önişlemci meta kitaplığını kullanıyordum (2010 kullanıyorum ve bu onları desteklemiyor). Fonksiyonum rval referansları kullanıyor ve std::forwardmükemmel yönlendirme yapmak için beni düşündürdü ... C ++ 0X çıktığında ve standart bir derleyicim olduğunda bunu gerçek değişken şablonlarla yapardım. …


1
Belirtilen şablon parametrelerine sahip C ++ 11 make_pair derlenmiyor
-Std = c ++ 11 etkinken g ++ 4.7 (sonraki anlık görüntülerden biri) ile oynuyordum. Mevcut kod tabanımdan bazılarını derlemeye çalıştım ve başarısız olan bir durum biraz kafamı karıştırdı. Biri neler olduğunu açıklayabilirse minnettar olurum. İşte kod: #include <utility> #include <iostream> #include <vector> #include <string> int main ( ) { …

3
Lambda kapatma değerleri, değer referans parametreleri olarak geçirilebilir
lvalueLambda kapaklarının her zaman rvaluefonksiyon parametresi olarak geçebileceğini buldum . Aşağıdaki basit gösterilere bakın. #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` function …

2
Burada enum değişkeni neden bir değerdir?
Misal: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } Bunu derlediğimde aşağıdaki hatayı alıyorum: <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to …
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.