C++17 - La guía completa
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.
Table of Contents
-
-
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
-
Prefacio
-
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
yswitch
con un inicializador-
2.1
if
con un inicializador -
2.2
switch
con un inicializador - 2.3 Notas posteriores
-
2.1
-
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 implicainline
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
-
6.1 Lambdas
-
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
-
7.1 Atributo
-
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
-
1. Vínculos estructurados
-
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
-
10.1 Motivación de
-
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
-
13.1 Usar
-
14. Declaraciones
using
extendidas-
14.1 Usar declaraciones
using
variádicas -
14.2 Declaraciones
using
variádicas para constructores heredables - 14.3 Notas posteriores
-
14.1 Usar declaraciones
-
9. Deducción de argumentos de plantillas de clase
-
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
-
15.1 Usar
-
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
-
16.1 Motivaci贸n de
-
17.
std::any
-
17.1 Usar
std::any
-
17.2 Tipos y operaciones de
std::any
- 17.3 Notas posteriores
-
17.1 Usar
-
18.
std::byte
-
18.1 Usar
std::byte
-
18.2 Tipos y operaciones de
std::byte
- 18.3 Notas posteriores
-
18.1 Usar
-
19. Vistas sobre cadenas (
std::string_view
s)-
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
-
19.1 Diferencias al comparar con
-
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
-
15.
-
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
-
21.1 Sufijo
-
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
-
23.1
-
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()
, ydata()
-
25.2
as_const()
-
25.3
clamp()
-
25.4
sample()
- 25.5 Notas posteriores
-
25.1
-
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
-
28.1
-
21. Extensiones a los rasgos de tipo
-
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
ydelete
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
-
30.1 Usar
-
31.
std::to_chars()
ystd::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
-
32.1 Motivación de
-
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
-
33.1
-
29. Recursos de memoria polifórmicos (PMR)
-
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
-
34.1 Valor de
-
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
-
34. Ajustes comunes de C++17
- Notas
Authors have earned$10,261,184writing, publishing and selling on Leanpub, earning 80% royalties while saving up to 25 million pounds of CO2 and up to 46,000 trees.
Más información sobre cómo escribir en Leanpub
Leanpub incondicional, sin riesgo, 100% de felicidad garantizada
Durante los primeros 45 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.
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), EPUB (para teléfonos y tabletas) y MOBI (para 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
Top Books
C++20
Rainer GrimmC++20 is the next big C++ standard after C++11. As C++11 did it, C++20 changes the way we program modern C++. This change is, in particular, due to the big four of C++20: ranges, coroutines, concepts, and modules.
500 QUIZ MMG COMMENTATI
ALS Medicina Generale500 Quiz degli ULTIMI Concorsi di Medicina Generale (2014/2016/2017/2018/2019)
Riassunti e suddivisi per area con Griglia risposte vuota e Griglia risposte esatte Ministeriale
Commentati con link alla fonte per approfondimento e ausilio allo studio
R Programming for Data Science
Roger D. PengThis book brings the fundamentals of R programming to you, using the same material developed as part of the industry-leading Johns Hopkins Data Science Specialization. The skills taught in this book will lay the foundation for you to begin your journey learning data science. Printed copies of this book are available through Lulu.
Ansible for DevOps
Jeff GeerlingAnsible is a simple, but powerful, server and configuration management tool. Learn to use Ansible effectively, whether you manage one server—or thousands.
Atomic Kotlin
Bruce Eckel and Svetlana IsakovaFor both beginning and experienced programmers! From the author of the multi-award-winning Thinking in C++ and Thinking in Java together with a member of the Kotlin language team comes a book that breaks the concepts into small, easy-to-digest "atoms," along with exercises supported by hints and solutions directly inside IntelliJ IDEA!
Continuous Delivery Pipelines
Dave FarleyThis practical handbook provides a step-by-step guide for you to get the best continuous delivery pipeline for your software.
C++ Best Practices
Jason TurnerLevel up your C++, get the tools working for you, eliminate common problems, and move on to more exciting things!
Visualise, document and explore your software architecture
Simon BrownA short guide to visualising, documenting and exploring your software architecture.
Discrete Mathematics for Computer Science
Alexander Shen, Alexander S. Kulikov, Vladimir Podolskii, and Aleksandr GolovnevThis book supplements the DM for CS Specialization at Coursera and contains many interactive puzzles, autograded quizzes, and code snippets. They are intended to help you to discover important ideas in discrete mathematics on your own. By purchasing the book, you will get all updates of the book free of charge when they are released.
Functional Design and Architecture
Alexander GraninSoftware Design in Functional Programming, Design Patterns and Practices, Methodologies and Application Architectures. How to build real software in Haskell with less efforts and low risks. The first complete source of knowledge.
Top Bundles
- #1
Software Architecture for Developers: Volumes 1 & 2 - Technical leadership and communication
2 Books
"Software Architecture for Developers" is a practical and pragmatic guide to modern, lightweight software architecture, specifically aimed at developers. You'll learn:The essence of software architecture.Why the software architecture role should include coding, coaching and collaboration.The things that you really need to think about before... - #2
Software Architecture and Design Practice Reference
2 Books
Dive deeper in Software Architecture with the Design Practice Reference. Learn all about software architecture and design from the books in this bundle:Software Architecture covers topics from quality attributes to designing and modeling components, interfaces, connectors, and containers, all the way to services and microservices. The Design... - #6
Linux Administration Complet
4 Books
Ce lot comprend les quatre volumes du Guide Linux Administration :Linux Administration, Volume 1, Administration fondamentale : Guide pratique de préparation aux examens de certification LPIC 1, Linux Essentials, RHCSA et LFCS. Administration fondamentale. Introduction à Linux. Le Shell. Traitement du texte. Arborescence de fichiers. Sécurité... - #7
The Python Craftsman
3 Books
The Python Craftsman series comprises The Python Apprentice, The Python Journeyman, and The Python Master. The first book is primarily suitable for for programmers with some experience of programming in another language. If you don't have any experience with programming this book may be a bit daunting. You'll be learning not just a programming... - #8
All the Books of The Medical Futurist
6 Books
We put together the most popular books from The Medical Futurist to provide a clear picture about the major trends shaping the future of medicine and healthcare. Digital health technologies, artificial intelligence, the future of 20 medical specialties, big pharma, data privacy, digital health investments and how technology giants such as Amazon... - #10
Mastering Containers
2 Books
Docker and Kubernetes are taking the world by storm! These books will get you up-to-speed fast! Docker Deep Dive is over 400 pages long, and covers all objectives on the Docker Certified Associate exam.The Kubernetes Book includes everything you need to get up and running with Kubernetes!