C++17 - La guía completa
$14.90
Precio mínimo
$34.90
Precio sugerido

C++17 - La guía completa

Sobre este libro

C++17 es la próxima evolución en la programación de C++ moderno, ahora soportado por los compiladores importantes de C++. Aunque la adopción de C++17 no es un paso tan grande como la adopción de C++11, C++17 contiene un gran número de pequeñas y valiosas características del lenguaje y la biblioteca, las cuales soportan y cambian la manera en la que programamos en C++. Como es usual, nada se explica por sí mismo, el combinar nuevas características te da aún más poder, y existen trampas ocultas.

Este libro cubre la motivación para, y el contexto de todas las nuevas características de C++17 (cubre tanto el lenguaje como la biblioteca) con muchos ejemplos e información única de trasfondo para los programadores de aplicaciones y los desarrolladores de bibliotecas. El enfoque es en cómo estas características impactan la programación día a día, qué efecto puede tener combinar estas características y cómo puedes beneficiarte de ellas en la práctica.

“¡Está escrito muy claramente y los ejemplos son muy útiles!” Graham Markall

“Estoy disfrutando el libro minuciosamente; había echado un vistazo a la lista de cambios en C++17 muchas veces antes, pero hasta que empecé a leer este libro, no tenía idea de qué tan sustanciales eran los cambios. ¡Me pone a pensar lo que pasé por alto con actualizaciones anteriores!” Jason Birch

“Pensé que sabía algo de C++. Descargué este libro y aprendí algo nuevo en el prefacio. ¡Hasta ahora altamente recomendado!” Tristan Brindle

Nicolai M. Josuttis es muy famoso en la comunidad de C++ como un conferencista y por escribir con autoridad, siendo el autor de los éxitos de ventas mundiales “The C++ Standard Library - A Tutorial and Reference” y (como coautor) de “C++ Templates - The Complete Guide”. Ha sido un miembro activo del comité de estandarización de C++ por más de 20 años.

Sobre el autor

Nicolai M. Josuttis
Nicolai M. Josuttis

Nicolai Josuttis (http://www.josuttis.com) is well known in the programming community because he not only speaks and writes with authority, being the (co-)author of the world-wide best sellers

but is also an innovative presenter, having talked at various conferences and events.

He is an independent trainer and speaker being active in C++ standardization for more than 20 years.

Tabla de contenidos

  •  
    • Prefacio
      • Agradecimientos
    • Acerca de este libro
      • Lo que debes saber antes de leer este libro
      • Estructura general del libro
      • Cómo leer este libro
      • Terminología de errores
      • El estándar C++17
      • Ejemplos de código e información adicional
      • Retroalimentación
  • I Características básicas del lenguaje
    • 1. Vínculos estructurados
      • 1.1 Vínculos estructurados en detalle
      • 1.2 Dónde pueden usarse los vínculos estructurados
      • 1.3 Suministrar una API similar a una tupla para vínculos estructurados
      • 1.4 Notas posteriores
    • 2. if y switch con un inicializador
      • 2.1 if con un inicializador
      • 2.2 switch con un inicializador
      • 2.3 Notas posteriores
    • 3. Variables en línea
      • 3.1 Motivación de las variables en línea
      • 3.2 Usar variables en línea
      • 3.3 constexpr ahora implica inline para miembros estáticos
      • 3.4 Variables en línea y thread_local
      • 3.5 Notas posteriores
    • 4. Extensiones a agregados
      • 4.1 Motivación de la inicialización de agregados extendida
      • 4.2 Usar la inicialización de agregados extendida
      • 4.3 Definición de agregados
      • 4.4 Incompatibilidades con definiciones anteriores
      • 4.5 Notas posteriores
    • 5. Elisión de copia obligatoria o paso de objetos inmaterializados
      • 5.1 Motivación de la elisión de copia obligatoria para temporales
      • 5.2 Beneficio de la elisión de copia obligatoria para temporales
      • 5.3 Categorías de valor clarificadas
      • 5.4 Pasar valor de retorno inmaterializado
      • 5.5 Notas posteriores
    • 6. Extensiones a lambdas
      • 6.1 Lambdas constexpr
      • 6.2 Pasar copias de this a lambdas
      • 6.3 Capturar por referencia const
      • 6.4 Notas posteriores
    • 7. Nuevos atributos y características de atributos
      • 7.1 Atributo [[nodiscard]]
      • 7.2 Atributo [[maybe_unused]]
      • 7.3 Atributo [[fallthrough]]
      • 7.4 Extensiones generales a atributos
      • 7.5 Notas posteriores
    • 8. Otras características del lenguaje
      • 8.1 Espacios de nombres anidados
      • 8.2 Orden de evaluación de expresión definido
      • 8.3 Inicialización de enumeraciones desde valores integrales relajada
      • 8.4 Inicialización de lista directa con auto corregida
      • 8.5 Literales hexadecimales de punto flotante
      • 8.6 Literales de carácter UTF-8
      • 8.7 Especificaciones de excepción como parte del tipo
      • 8.8 static_assert con un solo argumento
      • 8.9 Condición del preprocesador __has_include
      • 8.10 Notas posteriores
  • II Características de plantillas
    • 9. Deducción de argumentos de plantillas de clase
      • 9.1 Uso de la deducción de argumentos de plantillas de clase
      • 9.2 Guías de deducción
      • 9.3 Notas posteriores
    • 10. if en tiempo de compilación
      • 10.1 Motivación de if en tiempo de compilación
      • 10.2 Usar if en tiempo de compilación
      • 10.3 if en tiempo de compilación con un inicializador
      • 10.4 Usar if en tiempo de compilación aparte de plantillas
      • 10.5 Notas posteriores
    • 11. Expresiones de pliegue
      • 11.1 Motivación de las expresiones de pliegue
      • 11.2 Usar expresiones de pliegue
      • 11.3 Notas posteriores
    • 12. Tratar con literales de cadena como parámetros de plantilla
      • 12.1 Usar cadenas en plantillas
      • 12.2 Notas posteriores
    • 13. Tipos de marcador de posición similares a auto usados como parámetros de plantilla
      • 13.1 Usar auto en parámetros de plantilla
      • 13.2 Usar auto como un parámetro de plantilla de variable
      • 13.3 Usar decltype(auto) como parámetro de plantilla
      • 13.4 Notas posteriores
    • 14. Declaraciones using extendidas
      • 14.1 Usar declaraciones using variádicas
      • 14.2 Declaraciones using variádicas para constructores heredables
      • 14.3 Notas posteriores
  • III Nuevos componentes de la biblioteca
    • 15. std::optional<>
      • 15.1 Usar std::optional<>
      • 15.2 Tipos y operaciones de std::optional<>
      • 15.3 Casos especiales
      • 15.4 Notas posteriores
    • 16. std::variant<>
      • 16.1 Motivaci贸n de std::variant<>
      • 16.2 Usar std::variant<>
      • 16.3 Tipos y operaciones de std::variant<>
      • 16.4 Poliformismo y colecciones heterog茅neas con std::variant
      • 16.5 Casos especiales con std::variant<>
      • 16.6 Notas posteriores
    • 17. std::any
      • 17.1 Usar std::any
      • 17.2 Tipos y operaciones de std::any
      • 17.3 Notas posteriores
    • 18. std::byte
      • 18.1 Usar std::byte
      • 18.2 Tipos y operaciones de std::byte
      • 18.3 Notas posteriores
    • 19. Vistas sobre cadenas (std::string_views)
      • 19.1 Diferencias al comparar con std::string
      • 19.2 Usar vistas sobre cadenas
      • 19.3 Usar vistas sobre cadenas como par谩metros
      • 19.4 Tipos y operaciones de vistas sobre cadenas
      • 19.5 Usar vistas sobre cadenas en una API
      • 19.6 Notas posteriores
    • 20. La biblioteca del sistema de archivos
      • 20.1 Ejemplos b谩sicos
      • 20.2 Principios y terminolog铆a
      • 20.3 Operaciones de las rutas de acceso
      • 20.4 Operaciones del sistema de archivos
      • 20.5 Iterar sobre directorios
      • 20.6 Notas posteriores
  • IV Extensiones y modificaciones a la biblioteca
    • 21. Extensiones a los rasgos de tipo
      • 21.1 Sufijo _v de los rasgos de tipo
      • 21.2 Nuevos rasgos de tipo
      • 21.3 Notas posteriores
    • 22. Algoritmos paralelos de la STL
      • 22.1 Usar algoritmos paralelos
      • 22.2 Políticas de ejecución
      • 22.3 Control de excepciones
      • 22.4 Beneficio de no usar algoritmos paralelos
      • 22.5 Resumen de los algoritmos paralelos
      • 22.6 Motivación de los nuevos algoritmos para procesamiento paralelo
      • 22.7 Notas posteriores
    • 23. Nuevos algoritmos de la STL en detalle
      • 23.1 std::for_each_n()
      • 23.2 Nuevos algoritmos numéricos de la STL
      • 23.3 Notas posteriores
    • 24. Subcadenas y buscadores de subsecuencias
      • 24.1 Usar buscadores de subcadenas
      • 24.2 Usar buscadores de subsecuencias generales
      • 24.3 Usar predicados de buscadores
      • 24.4 Notas posteriores
    • 25. Otros algoritmos y funciones de utilidad
      • 25.1 size(), empty(), y data()
      • 25.2 as_const()
      • 25.3 clamp()
      • 25.4 sample()
      • 25.5 Notas posteriores
    • 26. Extensiones a contenedores y cadenas
      • 26.1 Controles de nodos
      • 26.2 Mejoras a emplazamiento
      • 26.3 Soporte de contenedores para tipos incompletos
      • 26.4 Mejoras a cadenas
      • 26.5 Notas posteriores
    • 27. Multihilos y concurrencia
      • 27.1 Cerrojos y mutexes suplementarios
      • 27.2 is_always_lock_free para tipos atómicos
      • 27.3 Tamaños de las líneas de caché
      • 27.4 Notas posteriores
    • 28. Otras características y pequeñas modificaciones a la biblioteca
      • 28.1 std::uncaught_exceptions()
      • 28.2 Mejoras a punteros compartidos
      • 28.3 Extensiones numéricas
      • 28.4 Extensiones a chrono
      • 28.5 Extensiones y correcciones a constexpr
      • 28.6 Extensiones y correcciones a noexcept
      • 28.7 Notas posteriores
  • V Utilidades para expertos
    • 29. Recursos de memoria polifórmicos (PMR)
      • 29.1 Usar recursos de memoria estándares
      • 29.2 Definir recursos de memoria personalizados
      • 29.3 Proveer soporte de recursos de memoria para tipos personalizados
      • 29.4 Notas posteriores
    • 30. new y delete con datos sobrealineados
      • 30.1 Usar new con alineaciones
      • 30.2 Implementar el operador new() para memoria alineada
      • 30.3 Implementar un operador new() global
      • 30.4 Rastrear todas las llamadas a ::new
      • 30.5 Notas posteriores
    • 31. std::to_chars() y std::from_chars()
      • 31.1 Motivación de conversiones de bajo nivel entre secuencias de caracteres y valores numéricos
      • 31.2 Ejemplo de uso
      • 31.3 Soporte de ida y vuelta para punto flotante
      • 31.4 Notas posteriores
    • 32. std::launder()
      • 32.1 Motivación de std::launder()
      • 32.2 Cómo launder() resuelve el problema
      • 32.3 Por qué/cuándo launder() no funciona
      • 32.4 Notas posteriores
    • 33. Mejoras para implementar c贸digo gen茅rico
      • 33.1 std::invoke<>()
      • 33.2 std::bool_constant<>
      • 33.3 std::void_t<>
      • 33.4 Notas posteriores
  • VI Consejos generales finales
    • 34. Ajustes comunes de C++17
      • 34.1 Valor de __cplusplus
      • 34.2 Compatibilidad con C11
      • 34.3 Tratar con controladores de señales
      • 34.4 Garantías del avance progresivo
      • 34.5 Notas posteriores
    • 35. Caracter铆sticas en desuso y eliminadas
      • 35.1 Caracter铆sticas base del lenguaje en desuso y eliminadas
      • 35.2 Caracter铆sticas de la biblioteca en desuso y eliminadas
      • 35.3 Notas posteriores
    • Glossary
      • A
      • E
      • I
      • O
      • P
      • S
      • T
    • Index
  • Notas

Leanpub incondicional, sin riesgo, 100% de felicidad garantizada

Durante los primeros 60 días de compra, puedes obtener un reembolso del 100% de cualquier compra Leanpub, en dos clics. Procesamos las restituciones manualmente, así que puede tomarse unos días en aparecer. Véase términos completos.

80% de regalías. Gana $16 en un libro de $20.

Pagamos 80% de regalías. No es un error tipográfico: ganas $16 en una venta de $20. Si vendemos 5000 copias no reembolsadas de tu libro o curso por $20, ganarás $80,000.

(Sí, algunos autores ya han ganado mucho más que eso en Leanpub.)

De hecho, los autores han ganadomás de $12 millonesescribiendo, publicando y vendiendo en Leanpub.

Aprende más sobre cómo escribir en Leanpub

Actualizaciones gratis. Libre de DRM.

¡Si compras un libro Leanpub obtienes actualizaciones gratis siempre y cuando el autor actualice el libro! Varios autores usan Leanpub para publicar sus libros en progreso mientras los escriben. Todos los lectores obtienen actualizaciones gratis, independientemente de cuándo compraron el libro o cuánto pagaron (incluyendo si fue gratis).

La mayoría de los libros Leanpub se encuentran disponibles en PDF (para computadores) y EPUB (para teléfonos, tabletas, y Kindle). Los formatos que un libro incluye se muestran en la esquina superior derecha de esta página.

Finalmente, los libros Leanpub no tienen ninguna de las cosas sin sentido sobre protección de copia DRM, así que puedes leerlos fácilmente en cualquier dispositivo que se soporta.

Aprende más sobre los formatos de Leanpub y dónde puedes leerlos

Escribir y publicar en Leanpub

Los autores y editores usan Leanpub para publicar libros electrónicos sorprendentes en curso y completados, como éste. ¡También puedes utilizar Leanpub para escribir, publicar y vender tu libro! Leanpub es una potente plataforma para autores serios, que combina un flujo de trabajo de escritura y publicación simple y elegante con una tienda centrada en la venta de libros electrónicos en progreso. Leanpub es una máquina de escribir mágica para los autores: basta con escribir en texto plano, y para publicar tu libro electrónico, simplemente haz clic en un botón. Realmente es así de fácil.

Más información sobre cómo escribir en Leanpub