Sé que, en principio, este es probablemente un comportamiento indefinido, pero en el interés de tratar con un gran proyecto, esta es mi pregunta sobre GCC: Supongamos que compilo una unidad de transacción con gcc -std=c++98 y otra con -std=c++11 , utilizando exactamente la misma instalación del comstackdor. ¿Hay algún tipo de garantía de que […]
Debo estar absolutamente loco aquí, pero gcc 4.7.3 en mi máquina está dando el resultado más absurdo. Aquí está el código exacto que estoy probando: #include using namespace std; int main(){ unsigned int b = 100000; cout <>b) <> b; cout << b <>= b; cout << b << endl; return 0; } Ahora, cualquier […]
El estándar C99 dice en $ 6.5.2. Entre el punto de secuencia anterior y siguiente, un objeto tendrá su valor almacenado modificado a lo sumo por la evaluación de una expresión. Además, el valor anterior se leerá solo para determinar el valor que se almacenará . (énfasis por mí) Sigue diciendo que el siguiente ejemplo […]
Como recién llegado a C, estoy confundido acerca de cuándo lanzar un puntero está realmente bien. Según tengo entendido, puedes convertir cualquier tipo de puntero a cualquier otro tipo, y el comstackdor te permitirá hacerlo. Por ejemplo: int a = 5; int* intPtr = &a; char* charPtr = (char*) intPtr; Sin embargo, en general esto […]
Me sorprende descubrir accidentalmente que los siguientes trabajos: #include int main(int argc, char** argv) { struct Foo { Foo(Foo& bar) { std::cout << &bar << std::endl; } }; Foo foo(foo); // I can't believe this works… std::cout << &foo << std::endl; // but it does… } Estoy pasando la dirección del objeto construido en su […]
Considera un código: #include int main() { using std::cout; int a=3; cout << "a="<<a<<"\n"; { int a=a; cout << "new a = " << a << "\n"; a=5; cout << "a = " << a << "\n"; } cout << "old a = " << a << "\n"; } Esperaría que imprima a=3 new a […]
x = 1; std::cout << ((++x)+(++x)+(++x)); Espero que la salida sea 11 , pero en realidad es 12 . ¿Por qué?
int x=1; int y=2; x ^= y ^= x ^= y; Estoy esperando que los valores sean intercambiados. Pero da x = 0 y y = 1. cuando probé en lenguaje C, da el resultado correcto.
Solía pensar que en C99, incluso si los efectos secundarios de las funciones f y g interferían, y aunque la expresión f() + g() no contiene un punto de secuencia, f y g contendrían algo, por lo que el comportamiento sería no especificado: o f () se llamaría antes de g (), o g () […]
He visto las otras preguntas similares y leí el defecto al respecto. Pero todavía no lo entiendo ¿Por qué i = ++i + 1 bien definido en C ++ 11 cuando i = i++ + 1 no? ¿Cómo el estándar lo hace bien definido? Al hacer ejercicio, tengo la siguiente secuencia antes del gráfico (donde […]