2009-12-16 10 views
11
std::string s("??<"); 
std::cout << s << std::endl; 

¿Por qué esa salida {en lugar de ?? <¿por qué std :: string s ("?? <") generaba un {en lugar de ?? <como se esperaba?

Estoy usando Visual Studio 2008. Supongo que está codificándolo, pero ¿por qué y cómo se llama la codificación si eso es lo que está sucediendo?

Este pequeño% # $^*! me hizo buscar un error en mi código (prueba de unidad) durante 30 minutos antes de darme cuenta de que mi cuerda estaba destrozada. :(

+0

+1 Esto me hizo jajaja, pero supe la respuesta incluso antes de llegar al final de la pregunta. : o –

+0

Ese es el tipo de cosas que te molestan de una vez y nunca las olvidas por el tiempo que tardas en descubrir cuál es el problema ... mi propio descubrimiento ocurrió dentro de un bloque de código y me tomó un tiempo Comprenda por qué no compiló ... ¡es una suerte que alguien pueda desactivar esta miserable característica! –

Respuesta

26

Debido a trigraphs

Estos son los trigrafos compatibles, desde la página de Wikipedia:.

  • ??=#
  • ??/\
  • ??'^
  • ??([
  • ??)]
  • ??!|
  • ??<{
  • ??>}
  • ??-~

Para Visual Studio, de acuerdo con the documentation, los trigrafos se desactivan de manera predeterminada (lo suficientemente sensato), por lo tanto, verifique su proyecto/makefiles.

+0

que fue demasiado fácil para ti: \ pero esa parece la respuesta correcta !!! ¡Gracias! – cchampion

+1

Nunca he oído hablar de esos ... ¡bien! – xtofl

+2

Parece que ASP también usa Digraphs: '<%' ->' {','%> '->'} ' –

Cuestiones relacionadas