Avatar ·

Quais são as novas funcionalidades introduzidas no C++17? Visão geral das principais mudanças e exemplos

Olá a todos! Estou estudando C++ e atualmente tentando entender os novos padrões. Antes disso, trabalhei principalmente com C++11 e C++14, mas aqui no projeto os colegas disseram que é hora de migrar para o C++17. Abri a documentação e há tantas novidades que minha cabeça está girando. Ouvi falar sobre structured bindings, sobre if constexpr, sobre std::optional e std::variant. Mas como tudo isso funciona na prática? Por exemplo, frequentemente escrevo código onde preciso retornar de uma função ou um valor ou um erro. Antes eu usava tuplas ou parâmetros de saída. Ouvi dizer que no C++17 existe std::optional para isso. Mas como usá-lo corretamente? E o que é "garantia de elisão de cópia" (guaranteed copy elision)? Ouvi dizer que isso acelera o retorno de objetos, mas não entendo o mecanismo. Também estou interessado em como o trabalho com tuplas e pares foi simplificado. Antes, para desestruturar um std::pair, era necessário escrever std::tie(a, b) = my_pair. Agora, aparentemente, pode-se escrever auto [a, b] = my_pair. Isso realmente funciona? E a pergunta mais importante: o que e