Última atualização:2026-10-12
C++17 std::variant¶
Recentemente elaborei algumas perguntas interessantes e fiz um pequeno resumo: quantas delas você consegue responder?
Obs.: as respostas completas serão reveladas no Planeta.
Pergunta 1: quantas construções de tipos o construtor do std::variant chama, 1? 2? n?
Perguntas relacionadas:
- Qual é o comportamento de construção padrão do
std::variant? - O que acontece quando os tipos contidos no
std::variantnão possuem construtor padrão? - Como especificar o tipo do valor inicial de um
std::variant?
Pergunta 2: o código abaixo pode ser executado normalmente? Se puder, explique o motivo; caso contrário, apresente algumas soluções.
struct X {
X(int v) : v_(v) {}
int v_;
};
struct Y {
Y(double v) : v_(v) {}
double v_;
};
std::variant<X, Y> a1;
Perguntas relacionadas:
- Como adicionar ao
std::variantum tipo que possua construtor padrão? - Quando não há construtor padrão na lista de tipos do
std::variant, quais são as soluções possíveis? - Como construir explicitamente um
std::variantpara evitar o problema da construção padrão?
Pergunta 3: o que é monostate e que problema ela resolve?
Perguntas relacionadas:
- Como usar
std::monostateem umstd::variant? - Que impactos a introdução de
std::monostateteve sobre o design dostd::variant? - Em que situações é apropriado usar
std::monostate?
Pergunta 4: qual é a diferença entre defer_lock_t, try_to_lock_t e adopt_lock_t? Em que cenários são usados?
Perguntas relacionadas:
- Quais são os cenários de uso e o mecanismo de implementação de
defer_lock_t? - Como
try_to_lock_tlida com a tentativa de bloqueio do mutex? - Que cuidados devem ser tomados quando
adopt_lock_tassume a propriedade de um bloqueio já existente?
Tópicos relacionados¶
- Atributo [[nodiscard]] no C++17 | C++那些事
- C++17 std::string_view | C++那些事
- Recursos de memória PMR no C++17 | C++那些事
- Dezessete funcionalidades avançadas do C++17 | C++那些事
- Dedução de argumentos de template de classe CTAD no C++17 | C++那些事
- C++17 optional_ref | C++那些事
- Vinculações estruturadas no C++17 | C++那些事
- Dedução com auto em templates no C++17 | C++那些事
- Templates de variável no C++17 | C++那些事