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.
Tabla de contenido
-
-
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
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.
Que estés bien. Haz el bien.
Authors have earned$11,841,865writing, publishing and selling on Leanpub, earning 80% royalties while saving up to 25 million pounds of CO2 and up to 46,000 trees.
Learn more about writing on 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
Top Books
The Hitchhiker's Guide to DFIR: Experiences From Beginners and Experts
Barry Grundy, Tristram, John Haynes, ApexPredator, Andrew Rathbun, Kevin Pagano, Victor Heiland, Nisarg Suthar, Guus Beckers, and Jason WilkinsA first of its kind crowdsourced DFIR book written on GitHub by the members of the Digital Forensics Discord Server to share knowledge!
OpenIntro Statistics
David Diez, Christopher Barr, Mine Cetinkaya-Rundel, and OpenIntroA complete foundation for Statistics, also serving as a foundation for Data Science.
Leanpub revenue supports OpenIntro (US-based nonprofit) so we can provide free desk copies to teachers interested in using OpenIntro Statistics in the classroom and expand the project to support free textbooks in other subjects.
More resources: openintro.org.
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.
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.
Maîtriser Apache JMeter
Philippe Mouawad, Bruno Demion (Milamber), and Antonio Gomes RodriguesToute la puissance d'Apache JMeter expliquée par ses commiteurs et utilisateurs experts. De l'intégration continue en passant par le Cloud, vous découvrirez comment intégrer JMeter à vos processus "Agile" et Devops.
If you're looking for the newer english version of this book, go to Master JMeter : From load testing to DevOps
Software Architecture for Developers
Simon BrownA developer-friendly, practical and pragmatic guide to lightweight software architecture, technical leadership and the balance with agility.
Introduction to Data Science
Rafael A IrizarryThe demand for skilled data science practitioners in industry, academia, and government is rapidly growing. This book introduces concepts from probability, statistical inference, linear regression and machine learning and R programming skills. Throughout the book we demonstrate how these can help you tackle real-world data analysis challenges.
Concurrency with Modern C++
Rainer GrimmC++11 is the first C++ standard that deals with concurrency. The story goes on with C++17, C++20, and will continue with C++23.
I'll give you a detailed insight into the current and the upcoming concurrency in C++. This insight includes the theory and a lot of practice.
Optics By Example
Chris PennerA comprehensive example-driven guide to optics. Examples in Haskell, but adaptable to other languages.
Become a data-manipulation wizard using optics to manipulate data!
This book takes you from beginner to advanced using Lenses, Traversals, Prisms, and more!
Functional Event-Driven Architecture
Gabriel VolpeExplore the event-driven architecture (EDA) in a purely functional way. Learn to design and develop distributed systems that scale. Identify common design patterns in such systems.
Take your functional programming skills to the next level by joining me in developing a distributed system powered by Apache Pulsar and Fs2 streams, all in Scala 3!
Top Bundles
- #1
CCIE Service Provider Ultimate Study Bundle
2 Books
Piotr Jablonski, Lukasz Bromirski, and Nick Russo have joined forces to deliver the only CCIE Service Provider training resource you'll ever need. This bundle contains a detailed and challenging collection of workbook labs, plus an extensively detailed technical reference guide. All of us have earned the CCIE Service Provider certification... - #2
Practical FP in Scala + Functional event-driven architecture
2 Books
Practical FP in Scala (A hands-on approach) & Functional event-driven architecture, aka FEDA, (Powered by Scala 3), together as a bundle! The content of PFP in Scala is a requirement to understand FEDA so why not take advantage of this bundle!? - #3
Software Architecture
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... - #4
Modern C++ Collection
3 Books
Get All about Modern C++C++ Standard Library, including C++20Concurrency with Modern C++, including C++20C++20Each book has about 200 complete code examples. Updates are included. When I update one of the books, you immediately get the updated bundle. You can expect significant updates to each new C++ standard (C++23, C++26, .. ) and also... - #5
Pattern-Oriented Memory Forensics and Malware Detection
2 Books
This training bundle for security engineers and researchers, malware and memory forensics analysts includes two accelerated training courses for Windows memory dump analysis using WinDbg. It is also useful for technical support and escalation engineers who analyze memory dumps from complex software environments and need to check for possible... - #6
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... - #9
Learn Git, Bash, and Terraform the Hard Way
3 Books
Learn Git, Bash and Terraform using the Hard Way method.These technologies are essential tools in the DevOps armoury. These books walk you through their features and subtleties in a simple, gradual way that reinforces learning rather than baffling you with theory. - #10
Static Analysis and Automated Refactoring
2 Books
As PHP developers we are living in the "Age of Static Analysis". We can use a tool like PHPStan to learn about potential bugs before we ship our code to production, and we can enforce our team's programming standards using custom PHPStan rules. Recipes for Decoupling by Matthias Noback teaches you in great detail how to do this, while also...