2010-03-23 13 views
5

Estas preguntas son una especie de juego, y no encontré la solución para ellas.
Es posible escribir ::: en C++ sin utilizar comillas o algo así y el compilador lo aceptará (las macros también están prohibidas).¿Cómo es posible escribir legalmente ::: en C++ y ??? Cª#?

Y lo mismo es cierto para C# también, pero en C#, tiene que escribir ???.

Creo que C++ usará el operador de ámbito :: y C# usará ? :, pero no sé las respuestas.

¿Alguna idea?

+13

qué en la colina de Sam –

+6

Supongo que esta es una pregunta de tarea que se puso a través de una palabra mezclador. –

+0

Estas preguntas nos las dieron al comienzo de la conferencia diciendo: "si alguien ya conoce este tema, pueden trabajar en esta pregunta" :) – nbitd

Respuesta

4

Puede escribir tres marcas consecutivas de interrogación en C# sin comillas, pero no sin los espacios en blanco, usando el operador nulo coalescencia y la anulable carácter alias:

object x = 0; 
int y = x as int? ?? 1; 
0
I think C# will use ? : 

Qué quiere decir el uso de tres signos de interrogación en la misma línea?

var a = true ? new Nullable<int>(1) ?? 1 : 0; 

Editar: por lo que yo sé, es imposible escribir ??? en cualquier versión de C#.

1

con espacios en blanco, es fácil:

C++

class A{}; 
class B : :: A{}; 

o

int foo; 

int bar(){ 
    return decision ? -1 : :: foo; 
} 

Pero sin espacio en blanco, estos no compilarán (el compilador ve :: :, lo cual no tiene ningún sentido).

Del mismo modo, Aaronaught dio un buen ejemplo de ? ?? en C#, pero sin espacios en blanco, el compilador ve como ?? ?, que no se compilará.

+0

¿Tiene alguna referencia que el compilador de C# vea '???' como '?? ? '? Es más una escena que el compilador no * ve * en absoluto. –

+0

@Mendy: Sin espacio en blanco ('???'), el compilador da dos errores: "Término de expresión inválido '?'", Ubicado en el tercer signo de interrogación, y "; expected" ubicado después de él. Si pones un espacio para que sea '?? ? ', obtiene los mismos dos errores en las mismas ubicaciones [relativas]. Es esencialmente el principal "máximo" que el usuario168715 mencionó en un comentario a la pregunta original. –

Cuestiones relacionadas