Resultados de la búsqueda a petición "rvalue-reference"

1 la respuesta

¿Alguien puede explicar las referencias de valor con respecto a las excepciones?

Digamos que tengo esta clase de excepción: struct MyException : public std::exception { MyException(const std::exception &exc) : std::exception(exc) { cout << "lval\n"; } MyException(std::exception &&exc) : ...

2 la respuesta

No se puede vincular lvalue a rvalue reference

Tengo este fragmento de código de prueba de C ++, #include <vector> class A { std::vector<int> x; public: A(std::vector<int>&& _x) : x(_x) {} }; class B { A a; public: B(std::vector<int>&& _x) : a(/*move(*/_x/*)*/) {} };Estoy pasando_x a B como ...

1 la respuesta

¿Es un miembro de datos de un objeto temporal un valor x en C ++ 11?

#include <vector> using namespace std; struct A { vector<int> coll; }; void f(const vector<int>&){} void f(vector<int>&&){} int main() { f(A().coll); // Is "A().coll" an xvalue? }¿C ++ 11 garantizaf(A().coll) llamarávoid f(vector<int>&&)?

1 la respuesta

¿La mejor forma para constructores? Pasar por valor o referencia?

Me pregunto la mejor forma para mis constructores. Aquí hay un código de muestra: class Y { ... } class X { public: X(const Y& y) : m_y(y) {} // (a) X(Y y) : m_y(y) {} // (b) X(Y&& y) : m_y(std::forward<Y>(y)) {} // (c) Y m_y; } Y f() { return ...

5 la respuesta

¿Cuándo comenzará a marcar la diferencia la adición de un constructor de movimientos y un operador de asignación de movimientos?

Teniendo en cuenta la alta calidad de los compiladores de hoy en día con respecto a la optimización del valor de retorno (tanto RVO como NRVO), me preguntaba qué complejidad de clase es realmente significativa comenzar a agregar constructores de ...

4 la respuesta

¿Los compiladores de C ++ 11 convierten las variables locales en valores cuando pueden durante la optimización del código?

A veces es aconsejable dividir expresiones complicadas o largas en varios pasos, por ejemplo (la segunda versión no es más clara, pero es solo un ejemplo): return object1(object2(object3(x)));Se puede escribir como: object3 a(x); object2 b(a); ...

3 la respuesta

¿Por qué no puedo pasar una referencia rvalue como es a otra función en C ++ 11?

Tengo un código: void f(int&& i) { auto lambda = [](int&& j) { (void)j; } lambda(i); } int main() { f(5); }Clang ++ da un error:no known conversion from 'int' to 'int &&' for 1st argument Porqué eli cambia su tipo aint cuando se pasa a lalambda()?

3 la respuesta

¿Por qué necesitamos establecer la referencia rvalue en null en move constructor?

//code from https://skillsmatter.com/skillscasts/2188-move-semanticsperfect-forwarding-and-rvalue-references class Widget { public: Widget(Widget&& rhs) : pds(rhs.pds) // take source’s value { rhs.pds = nullptr; // why?? } private: struct ...

2 la respuesta

C ++ 0x: valor de referencia de valor versus valor no constante

Al programar en C ++ 03, no podemos pasar un temporal sin nombreT() a una funciónvoid foo(T&);. La solución habitual es darle un nombre al temporal y luego pasarlo como: T v; foo(v);Ahora, viene C ++ 0x, y ahora con referencias rvalue, una ...

1 la respuesta

Extender la vida útil temporal a través de rvalue data-member funciona con el agregado, pero no con el constructor, ¿por qué?

He encontrado que el siguiente esquema para extender un trabajo temporal de por vida funciona, no sé si debería, pero lo hace. struct S { std::vector<int>&& vec; }; int main() { S s1{std::vector<int>(5)}; // construct with temporary std::cout << ...