bolov
C++17 eliminó los trigrafos. IBM se opuso fuertemente a esto (aquí y aquí) por lo que parece haber argumentos a favor de ambos lados de la remoción/no remoción.
Pero dado que se tomó la decisión de eliminar los trígrafos, ¿por qué dejar los dígrafos? No veo ninguna razón para mantener los dígrafos más allá de las razones para mantener los trígrafos (que aparentemente no pesaban lo suficiente como para mantenerlos).
OMGtechy
Los trígrafos son más problemáticos para el usuario desprevenido que los dígrafos. Esto se debe a que se reemplazan dentro de literales de cadena y comentarios. Aquí hay unos ejemplos…
Ejemplo A:
std::string example = "What??!??!";
std::cout << example << std::endl;
What||
se imprimirá en la consola. Esto se debe al trigrafo. ??!
siendo traducido a |
.
Ejemplo B:
// Error ?!?!?!??!??/
std::cout << "There was an error!" << std::endl;
No pasará nada en absoluto. Esto es porque ??/
se traduce a \
que escapa del carácter de nueva línea y hace que la siguiente línea se comente.
Ejemplo C:
// This makes no sense ?!?!!?!??!??/
std::string example = "Hello World";
std::cout << example << std::endl;
Esto dará un error a lo largo de las líneas de use of undeclared identifier "example"
por las mismas razones que el Ejemplo B.
También hay problemas mucho más elaborados que los trigraphs pueden causar, pero entiendes la idea. Vale la pena señalar que muchos compiladores emiten una advertencia cuando se realizan dichas traducciones; otra razón más para tratar siempre las advertencias como errores. Sin embargo, esto no es requerido por el estándar y, por lo tanto, no se puede confiar en ello.
Los dígrafos son mucho menos problemáticos que los trígrafos, ya que no se reemplazan dentro de otro token (es decir, una cadena o un carácter literal) y no hay una secuencia que se traduzca en \
por lo que no se pueden escapar nuevas líneas en los comentarios.
Conclusión
Aparte del código más difícil de leer, hay menos problemas causados por los dígrafos y, por lo tanto, la necesidad de eliminarlos se reduce considerablemente.
Es casi Navidad, por lo que no permitir emoticonos con barba sería triste.
– usuario1804599
22 de diciembre de 2014 a las 11:25
Tenga en cuenta que los trigraphs están siendo obsoleto y no remoto. Creo que la idea es lograr que las personas que podrían estar usándolos dejen de usarlos en código nuevo y lograr que los desarrolladores con código antiguo migren eventualmente. No descifrarán el código, en cuanto a por qué: es solo otra forma de hacer lo mismo que hace que el lenguaje sea un poco más grande y más confuso.
– Benjamin Grünbaum
22 de diciembre de 2014 a las 11:29
@BenjaminGruenbaum Hasta donde yo sé, desaparecerán por completo en C++ 17
– Xeo
22 de diciembre de 2014 a las 11:47
@BenjaminGruenbaum se propusieron para la desaprobación en C ++ 11 pero eso no pasó. En C ++ 17, fueron votados para eliminarlos.
– bolov
22 de diciembre de 2014 a las 12:03
No sé cómo se desarrolló la discusión (por lo tanto, no es una respuesta), pero probablemente se deba a que la carga de mantener dígrafos es menor. Dado que no se reemplazan en comentarios o literales de cadena, no los usa accidentalmente.
–Steve Jessop
28 de diciembre de 2014 a las 17:04