Ú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?
Preguntas relacionadas:
- ¿Cómo se comporta la construcción por defecto de
std::variant? - ¿Qué ocurre cuando los tipos contenidos en
std::variantno tienen constructor por defecto? - ¿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:
- ¿Cómo añadir a
std::variantun tipo que sí tenga constructor por defecto? - ¿Qué soluciones existen cuando en la lista de tipos de
std::variantno hay ningún constructor por defecto? - ¿Cómo construir un
std::variantde forma explícita para evitar el problema de la construcción por defecto?
Pregunta 3: ¿qué es monostate y qué problema resuelve?
Preguntas relacionadas:
- ¿Cómo se usa
std::monostateconstd::variant? - ¿Qué impacto tiene la introducción de
std::monostateen el diseño destd::variant? - ¿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:
- ¿Cuál es el escenario de uso y el mecanismo de implementación de
defer_lock_t? - ¿Cómo maneja
try_to_lock_tel intento de bloqueo de un mutex? - ¿Qué precauciones hay que tomar con
adopt_lock_tal asumir la propiedad de un bloqueo ya existente?
Temas relacionados¶
- C++17: el atributo [[nodiscard]] | C++那些事
- C++17 std::string_view | C++那些事
- Recursos de memoria PMR en C++17 | C++那些事
- Diecisiete características avanzadas de C++17 | C++那些事
- Deducción de argumentos de plantilla de clase CTAD en C++17 | C++那些事
- C++17 optional_ref | C++那些事
- Vinculaciones estructuradas en C++17 | C++那些事
- Deducción con auto en plantillas de C++17 | C++那些事
- Plantillas de variable en C++17 | C++那些事