Recientemente me encontré con el siguiente código esotérico.
int main(){(([](){})());}
Vuelva a formatearlo de la siguiente manera para que sea más legible:
int main(){
(([](){})()); // Um... what?!?!
}
Pero no puedo entender cómo (([](){})())
es un código válido.
- No parece una sintaxis de puntero de función.
- No puede ser algún truco de sobrecarga de operadores. El código se compila tal cual.
Google no ayudó mucho con esta búsqueda de todos los símbolos. Pero se compila en Visual Studio 2010 y no genera nada. No hubo errores ni advertencias. Entonces parece un código válido.
Nunca he visto ningún código válido que sea tan extraño fuera de los punteros de funciones de Javascript y C.
¿Alguien puede explicar cómo esto es válido en C++?
¡Oye! Eso es mio. “
Don't sweat it. We have int main(){(([](){})());} which is valid C++"
(9 de noviembre en el chat)– seje
28 de noviembre de 2012 a las 10:50
es un cierre lambda c ++ 11
– usuario1773602
28 de noviembre de 2012 a las 10:51
@Mysticial: este código te desconcierta porque es inútil. Si esta lambda hiciera algo, reconocería que tiene una sintaxis similar a los punteros de función (con los que está estrechamente relacionado).
– S Chepurin
28 de noviembre de 2012 a las 11:25
@Mysticial – “6 años de C ++”: las lambdas se agregaron recientemente en C ++ 11, por lo que nadie tiene experiencia con ellas antes de hace aproximadamente un año.
– Pete Becker
28 de noviembre de 2012 a las 14:45
La URL aquí es bastante divertida: “how-is-int-main-valid-c”
– tckmn
06/04/2014 a las 22:29