c++ - ¿Es invariante la dirección frontal de std:: vector move?
stdmove (1)
Desde cppreference.com :
Después de que el contenedor mueva la construcción (sobrecarga (6)), las referencias, los punteros y los iteradores (aparte del iterador final) siguen siendo válidos, pero se refieren a los elementos que ahora están en * esto. La norma actual otorga esta garantía a través de la declaración general en §23.2.1 [container.requirements.general] / 12, y se está considerando una garantía más directa a través de LWG 2321 .
Los punteros a elementos no se invalidan, incluidos los punteros al primer elemento.
En el siguiente fragmento de código:
std::vector<double> a(100, 4.2);
auto* a_ptr = a.data();
auto b = std::move(a);
auto* b_ptr = b.data();
std::cout << ((b_ptr == a_ptr) ? "TRUE" : "FALSE") << ''/n'';
¿garantiza el estándar de C ++ que b_ptr
siempre es igual a a_ptr
después de std::move
? Ejecutar el código en el wandbox imprime TRUE
.