pueden poner permite los hashtags funcionan cuantos aparezco andan c++ c++11

c++ - poner - Seleccione explícitamente la asignación de copia



no me andan los hashtags en instagram (2)

Puede static_cast para const int& :

test = static_cast<const int&>(3);

En C ++ 11, si tanto la asignación de copia como la de movimiento están disponibles, el compilador elige automáticamente la asignación de copia si el argumento es lvalue y la asignación de movimiento si es rvalue. Usando std::move es posible seleccionar explícitamente la asignación de movimiento para lvalue. Pero, ¿cómo es posible seleccionar explícitamente la asignación de copia para rvalue?

Ejemplo de código:

#include <iostream> class testClass { public: testClass &operator=(const int &other) { std::cout << "Copy assignment chosen." << std::endl; return *this; } testClass &operator=(int &&other) { std::cout << "Move assignment chosen." << std::endl; return *this; } }; int main(int argc, char *argv[]) { int a = 4; testClass test; test = a; // Selects copy assignment test = 3; // Selects move assignment test = std::move(a); // Selects move assignment // test = std::copy(3); // <--- This does not work return 0; }


Una forma posible es escribir su propia copy para enlazar el objeto a una referencia de valor l:

template <class T> constexpr T& copy(T&& t) noexcept { return t; }

Y puedes probarlo de esta manera:

test = copy(a); test = copy(3); test = copy(std::move(a));

Puede poner esta función en su propio espacio de nombres para mantener las cosas limpias. También puede elegir un nombre mejor para él.

Para abordar el tema del miedo a la vida, aquí hay algunas consideraciones:

  • Esta función de copy toma una referencia y devuelve la misma referencia inmediatamente. Implica que la persona que llama es responsable de controlar la vida útil.
  • La vida útil de un objeto temporal persiste hasta el final de la declaración. Esto hace que el objeto persista lo suficiente como para pasarlo al lado izquierdo de = .