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

ejemplos - libreria iostream c++ descargar



¿Es válido construir un `std:: ostream` desde un búfer nulo? (1)

Sí, es legal y está bien definido crear una instancia de esa secuencia. Puede intercambiarlo de manera segura con otra secuencia, o asignarle un nuevo puntero (esta vez a un búfer existente) más adelante. La operación de salida en sí es de hecho un no-op.

Este es el por qué:

  1. La construcción no tiene una condición previa que no sea nula y solo tiene esta condición posterior:

    [C++11: 27.7.3.2/2]: Condición posterior: rdbuf() == sb .

  2. Curiosamente, señala explícitamente que no se realizará ninguna operación en sb dentro del constructor:

    [C++11: 27.7.3.2/4]: Observaciones: No realiza ninguna operación en rdbuf() .

  3. Pero tenga en cuenta también:

    [C++11: 27.7.3.2/1]: Efectos: construye un objeto de la clase basic_ostream , asignando valores iniciales a la clase base llamando a basic_ios<charT,traits>::init(sb) (27.5.5.2).

  4. Esa llamada init(sb) tiene el efecto de configurar badbit en el flujo cuando sb es NULL:

    [C++11: 27.5.5.2/3]: Condiciones posteriores: Las condiciones posteriores de esta función se indican en la Tabla 128.

    [C++11: Table 128]: [..] rdstate() : goodbit si sb no es un puntero nulo, de lo contrario badbit . [..]

  5. La operación de salida daría lugar a acciones equivalentes a la anulación de la referencia de un puntero nulo:

    [C++11: 27.7.3.1/2]: Dos grupos de firmas de función miembro comparten propiedades comunes: las funciones de salida con formato (o insertadores) y las funciones de salida sin formato. Ambos grupos de funciones de salida generan (o insertan) caracteres de salida por acciones equivalentes a llamar a rdbuf()->sputc(int_type) . Pueden usar otros miembros públicos de basic_ostream excepto que no invocarán a ningún miembro virtual de rdbuf() excepto overflow() , xsputn() y sync() .

    excepto que nunca llega tan lejos, porque para basic_ostream::sentry construction:

    [C++11: 27.7.3.4/3]: Si, después de completar cualquier preparación, os.good() es true , ok_ == true contrario, ok_ == false .

    y, para explicit operator basic_ostream::sentry::bool() const; :

    [C++11: 27.7.3.4/5]: Efectos: Devuelve ok_ .

    y:

    [C++11: 27.7.3.7/1]: Cada función de salida sin formato comienza su ejecución al construir un objeto de clase sentry . Si este objeto devuelve true , mientras se convierte a un valor de tipo bool , la función intenta generar la salida solicitada. [..]

    ... la implicación es que no se realiza ninguna operación de salida cuando badbit ya está configurado.

Este fue también el caso en C ++ 03.

Considera lo siguiente:

std::ostream out(nullptr);

¿Es esto legal y bien definido?

¿Qué tal si ahora hago:

out << "hello world/n";

¿Es esto legal y bien definido? Si es así, ¿es de suponer que es un no-op?