such libreria ejemplos descargar c++ c++11 iostream

c++ - libreria - ¿Por qué no se puede mover std:: ostream?



iostream vs stdio (1)

Claramente, las transmisiones no se pueden copiar. Debería ser posible mover secuencias. De acuerdo con el párrafo 4 de la sección 27.9.1.11 [ofstream.cons], es posible mover la construcción std::ofstream (lo mismo se std::*stringstream variantes std::ifstream , std::fstream y std::*stringstream ). Por ejemplo:

#include <iostream> #include <fstream> #include <string> std::ofstream makeStream(std::string const& name) { return std::ofstream(name); } int main() { std::ofstream out{ makeStream("example.log") }; }

Intentar mover un std::ostream , por ejemplo, para tener una función de fábrica creando un std::ofstream , un std::ostringstream u otro tipo de transmisión según un URN pasado como argumento no funciona. std::ostream (bueno, la plantilla de clase std::basic_ostream realidad) tiene un constructor de movimiento protected acuerdo con 27.7.3.1 [ostream].

¿Por qué no puede std::ostream moverse solo?


Originalmente eran móviles. Esto resultó ser un defecto de diseño por mi parte, y descubierto por Alberto Ganesh Barbati:

http://cplusplus.github.io/LWG/lwg-defects.html#911

El problema muestra algunos ejemplos donde ostream se mueve y / o intercambia, y los resultados son sorprendentes, en lugar de esperados. Estaba convencido de que estos tipos no deberían ser públicamente movibles ni intercambiables por este problema.