Avatar ·

¿Qué nuevas características aparecieron en C++17? Resumen de cambios clave y ejemplos

¡Hola a todos! Estoy estudiando C++ y ahora estoy tratando de entender los nuevos estándares. Antes trabajaba principalmente con C++11 y C++14, pero en el proyecto mis colegas dijeron que es hora de migrar a C++17. Abrí la documentación y hay tantas cosas nuevas que me da vueltas la cabeza. He oído hablar de structured bindings, de if constexpr, de std::optional y std::variant. Pero ¿cómo funciona todo esto en la práctica? Por ejemplo, a menudo escribo código donde necesito devolver de una función un valor o un error. Antes usaba tuplas o parámetros de salida. He oído que en C++17 hay std::optional para esto. Pero ¿cómo usarlo correctamente? ¿Y qué es "guaranteed copy elision"? He oído que acelera la devolución de objetos, pero no entiendo el mecanismo. También me interesa cómo se ha simplificado el trabajo con tuplas y pares. Antes, para descomponer un std::pair, tenía que escribir std::tie(a, b) = my_pair. Y ahora parece que se puede escribir auto [a, b] = my_pair. ¿Esto realmente funciona? Y la pregunta más importante: ¿qué y