vector<int> v(22);
bool b = (v[6]);
printf("%d", !b);
Falso
0
1
Este código tiene un error.
P2. ¿Cuál de las siguientes razones se considera una mala práctica al usar esta línea? (Alternativa: ¿Por qué se considera una mala práctica usar esta línea?)
usingnamespace std;
El código compilado siempre es más grande debido a todos los símbolos importados.
Si el código utiliza una función definida en dos bibliotecas diferentes con el mismo prototipo pero posiblemente con implementaciones diferentes, habrá un error de compilación debido a la ambigüedad.
Incluye automáticamente todos los archivos de encabezado en la biblioteca estándar (cstdint, cstdlib, cstdio, iostream, etc).
Hace que el compilador haga cumplir la inclusión exclusiva de archivos de encabezado pertenecientes a la biblioteca estándar, generando un error de compilación cuando se incluye un archivo de encabezado diferente.
P5. ¿Cuál de las siguientes afirmaciones es verdadera sobre la diferencia entre punteros e iteradores?
union {uint16_t a;
uint32_t b;
int8_t c;
} u1;
Mientras que los punteros son variables que contienen direcciones de memoria, los iteradores son funciones genéricas utilizadas para recorrer contenedores. Esta función permite al programador implementar código de lectura y escritura a medida que se recorre el contenedor.
Incrementar un iterador siempre significa acceder al siguiente elemento en el contenedor (si hay alguno), sin importar el contenedor. Incrementar el puntero significa apuntar al siguiente elemento en la memoria, no siempre al siguiente elemento.
Los punteros son variables que contienen direcciones de memoria, mientras que el iterador es un entero sin signo que se refiere a desplazamientos en matrices.
Todos los iteradores están implementados con punteros, por lo que todos los iteradores son punteros pero no todos los punteros son iteradores.
P9. ¿Cuál de las siguientes no es una diferencia entre una clase y una estructura?
Debido a que las estructuras forman parte del lenguaje de programación C, existe cierta complejidad entre las estructuras de C y C++. Esto no ocurre con las clases.
Las clases pueden tener funciones miembro; las estructuras son privadas.
El especificador de acceso predeterminado para los miembros de una estructura es público, mientras que para los miembros de la clase es privado.
Los parámetros de tipo de plantilla se pueden declarar con clases, pero no con la palabra clave struct.
Las plantillas se pueden utilizar tanto con clases como con estructuras.
ReferenciaReferencia
P10. Suponga que necesita mantener una estructura de datos con permiso para acceder a algún recurso basado en los días de la semana, pero no puede usar una variable bool para cada día. Necesita usar un bit por día de la semana. ¿Cuál de las siguientes es una implementación correcta de una estructura con campos de bits para esta aplicación?
A
typedefstruct {int sunday:1;
int monday:1;
// more daysint friday:1;
int saturday:1;
} weekdays;
B
typedefchar[7]: weekdays;
C
typedefstruct { bit sunday:1;
bit monday:1;
// more days bit friday:1;
bit saturday:1;
} weekdays;
D
typedefstruct { bit sunday;
bit monday;
// more days bit friday;
bit saturday;
} weekdays;
ReferenciaNOTA: La sintaxis correcta es que el tamaño de cada variable es de 1 bit. bit no es un tipo en C++.
P11. ¿Qué es un lvalue?
Es una expresión constante, es decir, una expresión compuesta por constantes y operaciones.
Es una expresión que representa un objeto con una dirección.
Es una expresión adecuada para el operando del lado izquierdo en una operación binaria.
Es un valor de ubicación, es decir, una dirección de memoria adecuada para asignar a un puntero o referencia.
P12. ¿Qué hace el especificador de tipo auto en esta línea de código (desde C++11)?
auto x = 4000.22;
Especifica que el tipo de x se deducirá del inicializador, en este caso, double.
Especifica que el tipo de x es automático, lo que significa que puede asignarse diferentes tipos de datos a lo largo del programa.
Especifica que x es una variable con duración de almacenamiento automática.
Especifica que se asignará más memoria para x en caso de que necesite más espacio, evitando la pérdida de datos debido a un desbordamiento.
P13. ¿Qué es una plantilla de clase?
Clase escrita con el paradigma de programación genérica, especificando el comportamiento en términos de parámetro de tipo en lugar de tipo específico.
Superclase en blanco destinada a la herencia y el polimorfismo.
Clase que solo consta de una variable miembro, sin constructor, destructor o funciones miembro.
Código fuente esquelético de una clase donde el programador debe completar partes específicas para definir los tipos de datos y algoritmos utilizados.
#include<iostream>intmain(){
int x=10, y=20;
std::cout << "x = " << x++ << " and y = " << --y << std::endl;
std::cout << "x = " << x-- << " and y = " << ++y << std::endl;
return(0);
}
x = 10 y y = 20 x = 11 y y = 19
x = 11 y y = 19 x = 10 y y = 20
x = 10 y y = 19 x = 11 y y = 20
x = 11 y y = 20 x = 10 y y = 19
P16. ¿Cuál es el significado de las dos partes especificadas entre paréntesis en un bucle for basado en rango, separadas por dos puntos?
La primera es una declaración de variable que contendrá un elemento en una secuencia. La segunda es la secuencia a recorrer.
La primera es un iterador, y la segunda es el valor de incremento que se agregará al iterador.
La primera es la variable de iteración. La segunda es un std::pair que especifica el rango (inicio y fin) en el que la variable iterará.
La primera es un objeto contenedor. La segunda es un std::pair que especifica el rango (inicio y fin) en el que los elementos se accederán dentro del bucle.