estaba leyendo el "C++ Cookbook", que tenía el siguiente fragmento:Mezcla cout y wcout mismo programa en
// cout << s << std::endl; // You shouldn't be able to
wcout << ws << std::endl; // run these at the same time
Si está interesado en ver el ejemplo real, aquí es a link to the page on Google books.
Además, encontré este SO question que parece indicar que mezclar wcout y cout está bien. ¿Podría alguien explicarme de qué está hablando este comentario?
EDITAR
De C++ estándar [27.4.1]:
operaciones de mezcla en correspondiente ancha y estrecha-streams de caracteres sigue la misma semántica que la mezcla de tales operaciones en los ficheros, como se especifica en la Enmienda 1 del estándar ISO C.
De C Standard [7.19.2]:
Cada flujo tiene una orientación. Después de asociar un flujo con un archivo externo, pero antes de que se realicen operaciones en él, el flujo es sin orientación. Una vez que se ha aplicado una función de entrada/salida amplia de caracteres a una secuencia sin orientación, la transmisión se convierte en una secuencia orientada en gran medida. De forma similar, una vez que se ha aplicado una función de entrada/salida de un byte a en una secuencia sin orientación, la transmisión se convierte en una secuencia orientada por bytes. Solo una llamada a la función freopen o la función fwide puede alterar la orientación de una transmisión. (Una llamada exitosa a freopen elimina cualquier orientación.)
Las funciones de entrada/salida de bytes no se aplicarán a un flujo orientado a gran angular y las funciones de entrada/salida de caracteres no se aplicarán a un flujo orientado a bytes.
Por lo tanto, el estándar parece decir que no debe mezclarlos. Sin embargo, encontré esta cita from this article:
Para Visual C++ 10.0 la función fwide está documentada como no implementada. Y desde un punto de vista práctico, al menos a nivel de salida de líneas enteras, aparentemente funciona bien para mezclar el uso de cout y wcout. Por lo tanto, felizmente, aparentemente Visual C++ simplemente ignora los requisitos de la norma y no mantiene una orientación de flujo C FILE impracticable.
Y también, en relación con gcc encontré esta cita de here:
Esta es una (nueva) característica, no un error, consulte libstdC++/11705 y en la búsqueda general sobre la orientación corriente en el Estándar C (C99, 7.19.2). En resumen, no puede mezclar E/S orientadas a bytes y de gran amplitud. Por ahora, debido al error señalado en libstdC++/11705, puede obtener algo cercano a sus expectativas llamando a std :: ios :: sync_with_stdio (false); al comienzo de su programa.
En realidad revisé la página de erratas del libro porque pensé que podría ser un error, pero no pude encontrar nada. –
@Jesse: es hora de contactar al autor, quizás. –
¿Puede explicar a qué se refiere y qué sucede en realidad: "Ambos se asignan a STDOUT"? , Gracias –