Saltar a contenido

Última actualización:2026-10-12

C++17 std::variant

Últimamente se me han ocurrido algunas preguntas interesantes; hago un pequeño resumen: ¿cuántas eres capaz de responder?

Nota: las respuestas completas se revelarán en el Planeta.

Pregunta 1: ¿cuántos constructores de tipo invocará el constructor de std::variant: 1, 2 o n?

std::variant<std::string, int> a1;
std::variant<X, Y> a2;

Preguntas relacionadas:

  1. ¿Cómo se comporta la construcción por defecto de std::variant?
  2. ¿Qué ocurre cuando los tipos contenidos en std::variant no tienen constructor por defecto?
  3. ¿Cómo se especifica el tipo del valor inicial de un std::variant?

Pregunta 2: ¿el siguiente código se ejecuta con normalidad? Si es así, explica por qué; si no, propón varias soluciones.

struct X {
    X(int v) : v_(v) {}
    int v_;
};

struct Y {
    Y(double v) : v_(v) {}
    double v_;
};

std::variant<X, Y> a1;

Preguntas relacionadas:

  1. ¿Cómo añadir a std::variant un tipo que sí tenga constructor por defecto?
  2. ¿Qué soluciones existen cuando en la lista de tipos de std::variant no hay ningún constructor por defecto?
  3. ¿Cómo construir un std::variant de forma explícita para evitar el problema de la construcción por defecto?

Pregunta 3: ¿qué es monostate y qué problema resuelve?

Preguntas relacionadas:

  1. ¿Cómo se usa std::monostate con std::variant?
  2. ¿Qué impacto tiene la introducción de std::monostate en el diseño de std::variant?
  3. ¿En qué situaciones resulta apropiado usar std::monostate?

Pregunta 4: ¿cuál es la diferencia entre defer_lock_t, try_to_lock_t y adopt_lock_t? ¿En qué escenarios se usan?

Preguntas relacionadas:

  1. ¿Cuál es el escenario de uso y el mecanismo de implementación de defer_lock_t?
  2. ¿Cómo maneja try_to_lock_t el intento de bloqueo de un mutex?
  3. ¿Qué precauciones hay que tomar con adopt_lock_t al asumir la propiedad de un bloqueo ya existente?

Temas relacionados

Comentarios