Test de C++: 24 preguntas para comprobar lo que sabes

¿Cuánto C++ sabes de verdad? Estas 24 preguntas repasan las 8 lecciones de nuestro curso de C++: compilar con g++, la salida con std::print, tipos e inicialización, control y funciones, contenedores y algoritmos, clases, memoria y punteros inteligentes, plantillas, herencia y excepciones, y un proyecto con CMake. Elige una respuesta en cada pregunta y pulsa Corregir al final: verás tu nota, los aciertos por lección y la explicación de cada respuesta.

No hace falta registrarse y nada se envía a ningún sitio: el test se corrige en tu propio navegador. Todas las respuestas con código se comprobaron compilando y ejecutando el código con GCC 15.3 (C++23).

Pregunta 1Lección 1: Primeros pasos

¿Qué escribe este programa?

#include <iostream>

int main()
{
    std::cout << "Hola" << ' ' << 3 + 4 << '\n';
}
Pregunta 2Lección 1: Primeros pasos

¿Por qué conviene compilar siempre con -std=c++23 (o la versión que uses) en lugar de confiar en la opción por omisión?

Pregunta 3Lección 1: Primeros pasos

¿Qué escribe este programa?

#include <print>

int main()
{
    std::print("a");
    std::println("b");
    std::println("c");
}
Pregunta 4Lección 2: Tipos, variables y cadenas

¿Qué pasa con este programa?

#include <print>

int main()
{
    int x{7.5};
    std::println("{}", x);
}
Pregunta 5Lección 2: Tipos, variables y cadenas

¿Qué escribe este programa?

#include <print>

int main()
{
    int a = 7, b = 2;
    double d = a / b;
    std::println("{}", d);
}
Pregunta 6Lección 2: Tipos, variables y cadenas

¿Qué escribe este programa?

#include <print>
#include <string>

int main()
{
    std::string s = "hola";
    s += " mundo";
    std::println("{} {}", s.size(), s[0]);
}
Pregunta 7Lección 3: Control y funciones

¿Qué escribe este programa?

#include <print>

void doblar(int x) { x *= 2; }
void doblar_ref(int& x) { x *= 2; }

int main()
{
    int n = 5;
    doblar(n);
    doblar_ref(n);
    std::println("{}", n);
}
Pregunta 8Lección 3: Control y funciones

¿Qué escribe este programa?

#include <print>

int main()
{
    int opcion = 1;
    switch (opcion) {
    case 1:
        std::print("uno ");
        [[fallthrough]];
    case 2:
        std::print("dos ");
        break;
    case 3:
        std::print("tres ");
    }
    std::println();
}
Pregunta 9Lección 3: Control y funciones

¿Qué escribe este programa?

#include <print>

int main()
{
    int c = 1;
    auto por_valor = [c] { return c; };
    auto por_referencia = [&c] { return c; };
    c = 5;
    std::println("{} {}", por_valor(), por_referencia());
}
Pregunta 10Lección 4: Contenedores y algoritmos

¿Qué escribe este programa?

#include <algorithm>
#include <print>
#include <vector>

int main()
{
    std::vector<int> v{5, 3, 8, 1};
    std::ranges::sort(v);
    v.push_back(2);
    std::println("{}", v);
}
Pregunta 11Lección 4: Contenedores y algoritmos

Guardas una referencia a v[0] y después haces v.push_back(x). ¿Qué puede pasar con la referencia?

Pregunta 12Lección 4: Contenedores y algoritmos

¿Qué escribe este programa?

#include <map>
#include <print>
#include <string>

int main()
{
    std::map<std::string, int> m;
    m["a"]++;
    if (m["b"] > 0)
        std::println("hay b");
    std::println("{}", m.size());
}
Pregunta 13Lección 5: Clases y objetos

¿Qué escribe este programa?

#include <print>
#include <string>

struct Traza {
    std::string nombre;
    Traza(std::string n) : nombre(n) { std::print("+{} ", nombre); }
    ~Traza() { std::print("-{} ", nombre); }
};

int main()
{
    {
        Traza a{"a"};
        Traza b{"b"};
    }
    std::println();
}
Pregunta 14Lección 5: Clases y objetos

¿Qué significa el const al final de int valor() const; en una clase?

Pregunta 15Lección 5: Clases y objetos

¿Qué escribe este programa?

#include <compare>
#include <print>

struct Version {
    int mayor;
    int menor;
    auto operator<=>(const Version&) const = default;
};

int main()
{
    std::println("{}", Version{1, 2} < Version{1, 10});
}
Pregunta 16Lección 6: Memoria, referencias y punteros inteligentes

¿Qué escribe este programa?

#include <memory>
#include <print>
#include <utility>

int main()
{
    auto p = std::make_unique<int>(5);
    auto q = std::move(p);
    std::println("{} {}", p == nullptr, *q);
}
Pregunta 17Lección 6: Memoria, referencias y punteros inteligentes

¿Qué escribe este programa?

#include <memory>
#include <print>

int main()
{
    auto a = std::make_shared<int>(1);
    {
        auto b = a;
        std::println("{}", a.use_count());
    }
    std::println("{}", a.use_count());
}
Pregunta 18Lección 6: Memoria, referencias y punteros inteligentes

¿Qué problema tiene una función que devuelve una referencia a una de sus variables locales?

Pregunta 19Lección 7: Plantillas, herencia y errores

¿Qué escribe este programa?

#include <print>

template <typename T>
T mayor(T a, T b) { return a > b ? a : b; }

int main()
{
    std::println("{} {}", mayor(3, 7), mayor<double>(2, 2.5));
}
Pregunta 20Lección 7: Plantillas, herencia y errores

¿Qué escribe este programa?

#include <print>
#include <string>

struct A {
    virtual ~A() = default;
    virtual std::string f() const { return "A"; }
    std::string g() const { return "A"; }
};

struct B : A {
    std::string f() const override { return "B"; }
    std::string g() const { return "B"; }
};

int main()
{
    B b;
    const A& r = b;
    std::println("{}{}", r.f(), r.g());
}
Pregunta 21Lección 7: Plantillas, herencia y errores

¿Qué escribe este programa?

#include <print>
#include <stdexcept>

int main()
{
    try {
        throw std::runtime_error("sin conexión");
        std::println("después del throw");
    } catch (const std::exception& e) {
        std::println("capturada: {}", e.what());
    }
}
Pregunta 22Lección 8: Un proyecto completo con CMake

En un CMakeLists.txt, ¿qué hace set(CMAKE_CXX_STANDARD 23)?

Pregunta 23Lección 8: Un proyecto completo con CMake

¿Para qué sirve #pragma once al principio de un archivo de cabecera (.hpp)?

Pregunta 24Lección 8: Un proyecto completo con CMake

¿Qué detecta la opción -fsanitize=address (AddressSanitizer) en tus pruebas?

Las preguntas siguen el orden del curso. Si fallas alguna, el enlace de su explicación te lleva a la lección donde se explica con ejemplos.