¿Quién diseñó el lenguaje C en los Bell Labs, a principios de los años 1970?
Respuesta : Dennis Ritchie
Dennis Ritchie diseñó el lenguaje C en los Bell Labs, donde sirvió para escribir el sistema operativo Unix.
Repasa Lenguajes C y C++: aquí tienes una selección de preguntas de todos los niveles, con respuesta y explicación. Para ponerte a prueba sin ver las respuestas, juega a los quizzes.
Jugar a los quizzes de Lenguajes C y C++Respuesta : Dennis Ritchie
Dennis Ritchie diseñó el lenguaje C en los Bell Labs, donde sirvió para escribir el sistema operativo Unix.
Respuesta : Bjarne Stroustrup
Bjarne Stroustrup empezó su trabajo a principios de los años 1980, bajo el nombre «C with Classes», antes de convertirlo en C++.
Respuesta : main
La ejecución de un programa C o C++ empieza en la función main, sea cual sea el archivo fuente que la contenga.
Respuesta : std::cout
std::cout es el flujo de salida estándar de C++; std::cin, por su parte, lee la entrada.
Respuesta : Inserta el contenido del archivo indicado en el código fuente
El preprocesador sustituye la directiva por el texto del archivo de cabecera indicado, aquí stdio.h, antes de que trabaje el compilador.
Respuesta : La programación orientada a objetos
C es un lenguaje procedimental. C++ añade las clases y, con ellas, la programación orientada a objetos, conservando la sintaxis de C.
Respuesta : 0
Los índices de los arrays empiezan en 0: un array de n elementos se indexa de 0 a n menos 1.
Respuesta : 2
Los dos operandos son enteros: la división es entera, y el resultado 2,5 se trunca a 2.
Respuesta : La dirección de memoria de x
El operador & devuelve la dirección de x, que el puntero p puede almacenar. El operador * sirve para acceder al valor apuntado.
Respuesta : Crea un alias: r designa el mismo objeto que x
Una referencia es un alias del objeto designado: no crea una copia y debe inicializarse en el momento de declararla.
Respuesta : En la pila (stack)
Las variables locales viven en la pila y desaparecen al terminar la función. El montículo sirve para la asignación dinámica, con malloc o new.
Respuesta : free
free devuelve al sistema la memoria reservada con malloc. En C++, un objeto creado con new se libera con delete.
Respuesta : Un bloque reservado dinámicamente que ya no se libera ni es accesible
Hay fuga cuando un bloque reservado dinámicamente no se libera aunque el programa ya no pueda acceder a él. La memoria queda reservada sin utilidad.
Respuesta : El elemento t[2]
En aritmética de punteros, p + 2 avanza dos elementos, no dos bytes: la expresión designa t[2].
Respuesta : Los miembros de una struct son públicos por defecto; los de una class son privados
struct y class ofrecen las mismas posibilidades en C++; solo cambia el acceso por defecto: public para struct, private para class.
Respuesta : Cuando el objeto sale de su ámbito
El destructor se llama automáticamente cuando un objeto local sale de su ámbito, lo que permite liberar sus recursos. El constructor, en cambio, se ejecuta al crearlo.
Respuesta : C++11
C++11 introdujo las lambdas, la palabra clave auto, la semántica de movimiento y los hilos de la biblioteca estándar.
Respuesta : std::unique_ptr
unique_ptr destruye el objeto al salir de su ámbito. No puede copiarse, solo se puede mover.
Respuesta : Adquirir un recurso en un constructor y liberarlo en el destructor
RAII, por Resource Acquisition Is Initialization, vincula la duración de un recurso a la de un objeto: la liberación se produce automáticamente al salir del ámbito.
Respuesta : Convierte x en una referencia rvalue, sin mover nada por sí mismo
std::move es un simple cast: permite que el constructor o el operador de movimiento tomen los recursos de x.
Respuesta : std::map
std::map se apoya en un árbol equilibrado: claves únicas, recorrido ordenado y búsqueda en O(log n). unordered_map, en cambio, usa una tabla hash sin orden.
Respuesta : 6
La captura [n] copia el valor de n en el momento de crear la lambda: f devuelve 3 por 2, es decir 6, aunque n cambie después.
Respuesta : El comportamiento es indefinido: el programa puede fallar o producir un valor cualquiera
Leer fuera de límites con [] es un comportamiento indefinido. Para std::vector, la función at() comprueba los límites y lanza std::out_of_range.
Respuesta : virtual
Sin esta palabra clave, la llamada se resuelve según el tipo del puntero. Con ella, la elección se hace según el tipo real del objeto, en ejecución.
Jugar a los quizzes de Lenguajes C y C++