Articles of rvalue

Pasando rvalues ​​a través de std :: bind

Quiero pasar un valor r a través de std::bind a una función que toma una referencia rvalue en C ++ 0x. No puedo entender cómo hacerlo. Por ejemplo: #include #include template void foo(Type &&value) { Type new_object = std::forward(value); // move-construct if possible } class Movable { public: Movable(Movable &&) = default; Movable &operator=(Movable &&) […]

¿Las referencias de validación permiten referencias colgantes?

Considera lo siguiente. #include using std::string; string middle_name () { return “Jaan”; } int main () { string&& danger = middle_name(); // ?! return 0; } Esto no computa nada, pero se comstack sin error y demuestra algo que encuentro confuso: el danger es una referencia colgante, ¿no es así?

tomando la dirección de un objeto temporal

§5.3.1 Operadores unarios, Sección 3 El resultado del operador unario es un puntero a su operando. El operando debe ser un lvalue o un id calificado. ¿Qué significa exactamente “será” en este contexto? ¿Significa que es un error tomar la dirección de un temporal? Me preguntaba, porque g ++ solo me da una advertencia, mientras […]

¿No es innecesario el modificador const?

El ítem 3 ” Effective C ++ ” dice “Use const siempre que sea posible”, y da un ejemplo como: const Rational operator*(const Rational& lhs, const Rational& rhs); para evitar que los clientes puedan cometer atrocidades como esta: Rational a, b, c; … (a * b) = c; // invoke operator= on the result of […]

¿Cuál es la categoría de valor de los operandos de los operadores de C ++ cuando no se especifica?

PREMISA: El estándar C ++ 11 clasifica las expresiones en tres categorías de valores disjuntas: lvalues , xvalues y prvalues (§ 3.10 / 1). Una explicación de qué categorías de valores está disponible, por ejemplo, aquí . Estoy luchando para averiguar cuáles son los requisitos de los diferentes operadores en la categoría de valor de […]

En C ++, ¿qué categorías (lvalue, rvalue, xvalue, etc.) pueden tener las expresiones que producen temporarios de tipo de clase?

Aquí hay un código de ejemplo: #include class Foo { public: explicit Foo(int x) : data(x) {}; Foo& operator++() { data += 1; return *this; } void *get_addr() { return (void*)this; } friend Foo operator + (const Foo& lhs, const Foo& rhs); friend std::ostream& operator << (std::ostream& os, const Foo& f); private: int data; }; […]

los valores r no pertenecientes a la clase siempre tienen tipos cv no calificados

La §3.10 sección 9 dice “los valores r no pertenecientes a la clase siempre tienen tipos cv no calificados”. Eso me hizo preguntarme … int foo() { return 5; } const int bar() { return 5; } void pass_int(int&& i) { std::cout << "rvalue\n"; } void pass_int(const int&& i) { std::cout << "const rvalue\n"; } […]