Me encontré con este extraño programa de C ++.
#include <iostream>
using namespace std;
int main()
{
int a = ({int x; cin >> x; x;});
cout << a;
}
¿Puede alguien explicar qué está pasando? ¿Cómo se llama esta construcción?
c++
syntax
language-extension
gcc-extensions
Koshimitsu
fuente
fuente

Respuestas:
Asigna un valor de entrada del usuario
ay lo imprime. se hace usando aStatement Expression.Las expresiones de declaración son extensiones del compilador gnu gcc que no son compatibles con los estándares C / C ++. Por lo tanto, cualquier código que utilice expresiones de declaración no cumple con los estándares ni es portátil.
IBM IBM XL C / C ++ v7.0 también admite expresiones de declaración y su documentación las explica adecuadamente:
Expresiones de declaración:
Siempre compilar el código seleccionando un sandard en GCC, utilice una de las opciones
-ansi,-std=c90o-std=iso9899:1990,-std=c++03,-std=c++0x; para obtener todos los diagnósticos requeridos por el estándar, también debe especificar-pedantic(o-pedantic-errorssi desea que sean errores en lugar de advertencias)fuente
Es una extensión de GCC. Compilar el código con el
-pedanticindicador si desea deshacerse de cosas como esta (y que realmente no quiere).fuente
Crea un alcance en línea, declara
xdentro de él, lo lee de la entrada estándar y finalmente se evalúa la declaración completa ax, que se asigna aa.El operador de coma funciona de manera similar, aunque no requiere un alcance separado. Por ejemplo:
int x; int a = (cin >> x, x);haría lo mismo. Todas las sentencias conectadas con comas se ejecutarán secuencialmente y el resultado de toda la expresión se establecerá en el valor del operando situado más a la derecha.
fuente
No creo que esto sea C ++ estándar. Probablemente sea una extensión específica del compilador que permite que un ámbito interno evalúe un valor.
fuente