SlideShare una empresa de Scribd logo
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
int foo;
foo es un entero
MADRID · NOV 27-28 · 2015
int* foo;
foo es un puntero a un entero
MADRID · NOV 27-28 · 2015
char *(*(**foo [][8])())[];
foo es un array de arrays de 8 punteros a función retornando un
puntero a un array de punteros a char
Codemotion 2015 - Bienvenido de nuevo c++
Bienvenido de nuevo
C++
(O por qué es mala idea aprender C
antes de C++)MADRID · NOV 27-28 · 2015
Eduard
Tomàs
@eiximenis
http://geeks.ms/blogs/etomas
etomas@gmail.com
Desarrollador en plain concepts
http://plainconcepts.com
Cervecero aficionado
https://untappd.com/user/eiximenis
MADRID · NOV 27-28 · 2015
C++ no es un “mejor C”
Olvida las “buenas prácticas” de C: no tienen porque ser
“buenas prácticas” de C++
No uses const char* para cadenas. Usa std::string
Usa la librería estándard de C++, “olvida” la de C
(strcpy, printf, ...)
No uses arrays directamente. Usa las clases de la
librería de C++ (std::vector, std::map,...) en su lugar
Usa referencias antes que punteros
MADRID · NOV 27-28 · 2015
C++98... C++11... C++14
C++98 es el estándard más usado de C++. Con el que
(casi) todos aprendimos, vaya :P
El lenguaje ha evolucionado mucho. El estándard
C++0x se concebió para estandarizar muchas de esas
evoluciones.
C++0x terminó siendo C++11
C++14 es una revisión menor de C++11
Modern C++
Ámbito de pila antes de ámbito de heap
Smart pointers antes que punteros
“desnudos”
Contenedores estándard antes que
propios
Algoritmos estándard antes que propios
Excepciones para reportar errores
Expresiones lambda
Range-based loops en lugar de bucles
normales
...
MADRID · NOV 27-28 · 2015
Classical C++...
circle* p = new circle();
shape** shapes = load_shapes_classic();
for (int idx = 0; idx < 10; idx++) {
cout << "Shape found " << shapes[idx]->name().c_str() << "n";
}
// Need to delete all shapes
for (int idx = 0; idx < 10; idx++) {
delete shapes[idx];
}
delete shapes;
delete p;
MADRID · NOV 27-28 · 2015
Modern C++
auto p = make_shared<circle>();
auto v = load_shapes_modern();
for_each(v.begin(), v.end(), [&](const shared_ptr<shape>& s) {
cout << "Shape found " << s->name().c_str() << "n";
});
MADRID · NOV 27-28 · 2015
Inferencia de tipos
Palabra clave auto declara el tipo de una variable en
función de su expresión
auto i = 10;
auto v = vector<int>();
...
MADRID · NOV 27-28 · 2015
auto
Muy útil en aquellos casos en que el tipo es realmente
complicado o complejo de saber
auto v = std::vector<int>();
// antes:
std::vector<int>::iterator i = v.begin();
// ahora:
auto i = v.begin();
MADRID · NOV 27-28 · 2015
auto
Necesario en aquellos casos en que el tipo es
imposible de saber por el desarrollador (pero sí por el
compilador en tiempo de compilación):
template<typename T, typename S>
void foo(T lhs, S rhs) {
????? prod = lhs * rhs;
// code...
}
MADRID · NOV 27-28 · 2015
decltype
Similar a auto en su concepción, pero decltype deduce un tipo en
base a una expresión pasada a decltype:
decltype(10) a; // a es int
decltype(2*3.0) b; // b es double
Necesario cuando el tipo de retorno de una función no es
conocido por el desarrollador (pero sí por el compilador en tiempo
de compilación)
MADRID · NOV 27-28 · 2015
decltype
¿Cual es el tipo de retorno de la función? Dependerá de
los tipos T y S resueltos en compilación.
template<typename T, typename S>
???? foo(T lhs, S rhs) {
auto prod = lhs * rhs;
return prod;
}
MADRID · NOV 27-28 · 2015
decltype
Problema: La idea es correcta pero no compila porque
lhs y rhs no están definidos al usar decltype
template<typename T, typename S>
decltype(lhs * rhs) foo(T lhs, S rhs) {
auto prod = lhs * rhs;
return prod;
}
MADRID · NOV 27-28 · 2015
trailing return type syntax
Se puede especificar el tipo del valor de retorno de
una función al final de la firma, usando ->
int sum(int a, int b) {...}
auto sum (int a, int b) -> int {...}
MADRID · NOV 27-28 · 2015
decltype
Ahora lhs y rhs estan definidos al usar decltype
template<typename T, typename S>
auto foo(T lhs, S rhs)-> decltype(lhs * rhs) {
auto prod = lhs * rhs;
return prod;
}
MADRID · NOV 27-28 · 2015
Referencias
Usa referencias antes que punteros siempre que sea
posible.
Las referencias siempre apuntan a un objeto siendo
mucho más seguras que un puntero
Muchas de las cosas que hacemos con punteros
pueden ser resueltas con referencias.
MADRID · NOV 27-28 · 2015
Gestión de la memoria
1. La diferencia fundamental entre new y delete por una parte, y malloc() y free()
por otra es que los primeros crean y destruyen objetos, mientras que los
segundos se limitan a reservar y liberar zonas de memoria
2. Al utilizar delete (lo mismo sucede con free()), se libera la zona de memoria a la
que apunta, pero sin borrar el propio puntero. Si se manda liberar lo apuntado por
un puntero nulo no pasa nada especial y el programa no libera memoria. Sin
embargo si se ordena liberar dos veces lo apuntado por un puntero las
consecuencias son imprevisibles y puede que incluso catastróficas, por lo
que es importante evitar este tipo de errores
http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf (pags 30,31)
MADRID · NOV 27-28 · 2015
Gestión de la memoria
Si usas new y delete para gestionar la memoria... lo
estás haciendo mal.
Es posible conseguir en C++, liberación automática de
memoria, de forma determinista y sin apenas esfuerzo.
Resource Acquisition Is Initialization
MADRID · NOV 27-28 · 2015
Gestión de la memoria - RAII
std::shared_ptr<T>
Encapsula el puntero a un objeto de
tipo T y un contador de
referencias asociado, compartido
por todos los shared_ptr que
apunten al mismo objeto
MADRID · NOV 27-28 · 2015
Gestión de la memoria - RAII
std::unique_ptr<T>
Objeto que mantiene la propiedad exclusiva de un
puntero a un objeto de tipo T.
Un unique_ptr no puede ser copiado, no pueden haber
dos unique_ptr apuntando al mismo objeto.
MADRID · NOV 27-28 · 2015
RAII
RAII se aplica no solo a memoria si no en general en
cualquier tipo de recurso:
class file
{
public:
file( const char* filename ) : m_file_handle(std::fopen(filename, "w+"))
{ }
~file()
{
std::fclose(m_file_handle) ;
}
private:
std::FILE* m_file_handle ;
file( const file & ) ;
file & operator=( const file & ) ;
} ;
void example_with_RAII()
{
// open file (acquire resource)
file logfile("logfile.txt");
// Use the resource. When exiting by going out
// of scope
// for any reason (including exceptions) file will
// be closed. No action needed to release the
// resource.
}
MADRID · NOV 27-28 · 2015
Expresiones lambda
Permiten definir closures de forma muy sencilla,
manteniendo en todo momento el control de qué
variables se quieren capturar.
[](int i)->int {return i * 2; };
Captura de variables Parámetros
Tipo retorno
Código
MADRID · NOV 27-28 · 2015
Expresiones lambda
Una expresión lambda... ¿Devuelve un puntero a
función?
¡NO! Devuelve un objeto que tiene operator() definido
MADRID · NOV 27-28 · 2015
Tipo de expresión lambda
Una expresión lambda tiene un tipo propio y único
generado por el compilador, pero que es convertible al
tipo function<T> siendo T la firma de la función.
P. ej. El tipo function<R(T,S)> representa una lambda
que tiene dos parámetros de tipo T y S y que devuelve
un valor de tipo T
MADRID · NOV 27-28 · 2015
Expresiones lambda template
Una expresión lambda puede tener parámetros
template
La palabra clave auto indica que el tipo del parámetro
es autodeducido
auto lambda_sum = [](auto x, auto y) {
return x + y;
};
¡Esto es un template no
inferencia de tipos!
MADRID · NOV 27-28 · 2015
¿Hay más?
Por supuesto.... Hay mucho más.
C++11 incluye muchas otras características:
1. Move semantics (r-value references)
2. override/final
3. type traits
4. Funciones deleted y defaulted
5. Variadic templates
6. Más...
MADRID · NOV 27-28 · 2015
¿Donde seguir?
http://www.stroustrup.com/C++11FAQ.html
https://en.wikipedia.org/wiki/C%2B%2B11
https://en.wikipedia.org/wiki/C%2B%2B14
https://isocpp.org/wiki/faq/cpp11-language
https://isocpp.org/wiki/faq/cpp14-language
The C++ standard book:
http://www.amazon.es/The-Programming-Language-
Bjarne-Stroustrup/dp/0321958322/
MADRID · NOV 27-28 · 2015
Gracias!!!!!
Eduard Tomàs
etomas@gmail.com
@eiximenis
http://geeks.ms/blogs/etomas

Más contenido relacionado

PDF
Capitulo 12
DOCX
A1 u1-16230227
PDF
Arreglos multidimensionales y de apuntadores
PDF
Matlab 2 Capitulo 5
PPT
Continuidad derivada sppt
PPT
Lenguaje de programacion c++ basico 4ta parte expresiones y funciones matemát...
PDF
Intro opengl
PDF
Formato de desarrollo_del_proyecto
Capitulo 12
A1 u1-16230227
Arreglos multidimensionales y de apuntadores
Matlab 2 Capitulo 5
Continuidad derivada sppt
Lenguaje de programacion c++ basico 4ta parte expresiones y funciones matemát...
Intro opengl
Formato de desarrollo_del_proyecto

La actualidad más candente (18)

PDF
Clase 1- Programacion Lineal
PPT
Trabajo De Ecuaciones Diferenciales
PDF
Federico moreira
DOCX
4º medio-taller-psu-matemática-funciones
PDF
Matemática: Funciones.
PPTX
Estructura de datos I Primera Parte
DOCX
Colaborativo 3 01
DOCX
Guia Programacion 1
PDF
Programación 1: funciones en C
DOC
Formato actividades semana 1 (1)
DOCX
Optimización
PDF
Introducción a Processing
DOCX
Algebra v
PPTX
Ejercicio RCL Resuelto con Matlab
PPT
Programación grafica en lenguaje c
DOC
C++ unidad1 semana1
DOCX
Cuestionario de 2(2)
PDF
Laboratorio1 -Teoría de los circuitos: Uso de Matlab
Clase 1- Programacion Lineal
Trabajo De Ecuaciones Diferenciales
Federico moreira
4º medio-taller-psu-matemática-funciones
Matemática: Funciones.
Estructura de datos I Primera Parte
Colaborativo 3 01
Guia Programacion 1
Programación 1: funciones en C
Formato actividades semana 1 (1)
Optimización
Introducción a Processing
Algebra v
Ejercicio RCL Resuelto con Matlab
Programación grafica en lenguaje c
C++ unidad1 semana1
Cuestionario de 2(2)
Laboratorio1 -Teoría de los circuitos: Uso de Matlab
Publicidad

Similar a Codemotion 2015 - Bienvenido de nuevo c++ (20)

PPT
principios de algortimos, secuencuas y base de dats
PPT
Sesión 3_Secuencial Principios de Algoritmos.ppt
PPTX
Del infierno al cielo
PPTX
Introducción a ObjectiveC e IOS
PDF
Java8 : Más allá de las Expresiones Lambdas
PPTX
Ejemplo de solución de práctica funciones stl
 
PPT
Fundamentos de Programacion
PDF
Matlab
PDF
Matlab (1)
PDF
Seminario de matlab
PDF
Introduccion a C++.pdf
PDF
6 libro fundamentos cap__modularidad_ecler mv
PDF
CLASE 3 INICIACION A LA PROGRAMACION EN PYTHON TALENTO TECH
PDF
5 Mecanismos Reuntilizacion Abstraccion Cont
 
PPT
Taller processing arduino
PPT
Intro classes(1)
ODP
Charla Mysql
PPTX
Clase 02
PDF
Novedades de C++11
PPT
MATLAB 2010
principios de algortimos, secuencuas y base de dats
Sesión 3_Secuencial Principios de Algoritmos.ppt
Del infierno al cielo
Introducción a ObjectiveC e IOS
Java8 : Más allá de las Expresiones Lambdas
Ejemplo de solución de práctica funciones stl
 
Fundamentos de Programacion
Matlab
Matlab (1)
Seminario de matlab
Introduccion a C++.pdf
6 libro fundamentos cap__modularidad_ecler mv
CLASE 3 INICIACION A LA PROGRAMACION EN PYTHON TALENTO TECH
5 Mecanismos Reuntilizacion Abstraccion Cont
 
Taller processing arduino
Intro classes(1)
Charla Mysql
Clase 02
Novedades de C++11
MATLAB 2010
Publicidad

Más de Eduard Tomàs (20)

PPTX
Kubernetes: Do's, don'ts and why's
PPTX
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
PPTX
Escalando workloads serverless en Kubernetes con Keda
PPTX
C#9 - Más C# que nunca
PPTX
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
PPTX
Keda o como convertir Kubernetess en Serverless
PPTX
.NET Memoria y Rendimiento
PPTX
Containers en .NET (Dot Net 2018 - Spain)
PPTX
Esos contenedores, ¡a producción! (Commit Conf 2018)
PPTX
El "peor" lenguaje del mundo
PPTX
Containerize a netcore application with aks
PPTX
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
PPTX
Aplicaciones de consola fáciles? Más quisieramos
PPTX
Serverless with Azure Functions and CosmosDb
PPTX
Docker y todo eso... más o menos
PPTX
Microservices: Yes or not?
PPTX
ASP.NET MVC Core
PPTX
Azure functions
PPTX
React native - Unleash the power of your device
PPTX
JavaScript in 2016 (Codemotion Rome)
Kubernetes: Do's, don'ts and why's
KCDS 2021- Escalando workloads serverless en Kubernetes con KEDA
Escalando workloads serverless en Kubernetes con Keda
C#9 - Más C# que nunca
CollabDays 2020 Barcelona - Serverless Kubernetes with KEDA
Keda o como convertir Kubernetess en Serverless
.NET Memoria y Rendimiento
Containers en .NET (Dot Net 2018 - Spain)
Esos contenedores, ¡a producción! (Commit Conf 2018)
El "peor" lenguaje del mundo
Containerize a netcore application with aks
Escenarios avanzados en AKS (Global Azure Bootcamp Barcelona 2019)
Aplicaciones de consola fáciles? Más quisieramos
Serverless with Azure Functions and CosmosDb
Docker y todo eso... más o menos
Microservices: Yes or not?
ASP.NET MVC Core
Azure functions
React native - Unleash the power of your device
JavaScript in 2016 (Codemotion Rome)

Último (8)

PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PDF
modelos de control para sistemas digitales
PDF
simulacion de teoria de control para maquinas
PDF
DIMENSIONADO DE UNA INSTALACION FOTOVOLTAICA.pdf
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PPTX
sistemas de informacion.................
AutoCAD Herramientas para el futuro, Juan Fandiño
modelos de control para sistemas digitales
simulacion de teoria de control para maquinas
DIMENSIONADO DE UNA INSTALACION FOTOVOLTAICA.pdf
Su punto de partida en la IA: Microsoft 365 Copilot Chat
Derechos_de_Autor_y_Creative_Commons.pptx
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
sistemas de informacion.................

Codemotion 2015 - Bienvenido de nuevo c++

  • 1. MADRID · NOV 27-28 · 2015
  • 2. MADRID · NOV 27-28 · 2015 int foo; foo es un entero
  • 3. MADRID · NOV 27-28 · 2015 int* foo; foo es un puntero a un entero
  • 4. MADRID · NOV 27-28 · 2015 char *(*(**foo [][8])())[]; foo es un array de arrays de 8 punteros a función retornando un puntero a un array de punteros a char
  • 6. Bienvenido de nuevo C++ (O por qué es mala idea aprender C antes de C++)MADRID · NOV 27-28 · 2015
  • 7. Eduard Tomàs @eiximenis http://geeks.ms/blogs/etomas etomas@gmail.com Desarrollador en plain concepts http://plainconcepts.com Cervecero aficionado https://untappd.com/user/eiximenis
  • 8. MADRID · NOV 27-28 · 2015 C++ no es un “mejor C” Olvida las “buenas prácticas” de C: no tienen porque ser “buenas prácticas” de C++ No uses const char* para cadenas. Usa std::string Usa la librería estándard de C++, “olvida” la de C (strcpy, printf, ...) No uses arrays directamente. Usa las clases de la librería de C++ (std::vector, std::map,...) en su lugar Usa referencias antes que punteros
  • 9. MADRID · NOV 27-28 · 2015 C++98... C++11... C++14 C++98 es el estándard más usado de C++. Con el que (casi) todos aprendimos, vaya :P El lenguaje ha evolucionado mucho. El estándard C++0x se concebió para estandarizar muchas de esas evoluciones. C++0x terminó siendo C++11 C++14 es una revisión menor de C++11
  • 10. Modern C++ Ámbito de pila antes de ámbito de heap Smart pointers antes que punteros “desnudos” Contenedores estándard antes que propios Algoritmos estándard antes que propios Excepciones para reportar errores Expresiones lambda Range-based loops en lugar de bucles normales ...
  • 11. MADRID · NOV 27-28 · 2015 Classical C++... circle* p = new circle(); shape** shapes = load_shapes_classic(); for (int idx = 0; idx < 10; idx++) { cout << "Shape found " << shapes[idx]->name().c_str() << "n"; } // Need to delete all shapes for (int idx = 0; idx < 10; idx++) { delete shapes[idx]; } delete shapes; delete p;
  • 12. MADRID · NOV 27-28 · 2015 Modern C++ auto p = make_shared<circle>(); auto v = load_shapes_modern(); for_each(v.begin(), v.end(), [&](const shared_ptr<shape>& s) { cout << "Shape found " << s->name().c_str() << "n"; });
  • 13. MADRID · NOV 27-28 · 2015 Inferencia de tipos Palabra clave auto declara el tipo de una variable en función de su expresión auto i = 10; auto v = vector<int>(); ...
  • 14. MADRID · NOV 27-28 · 2015 auto Muy útil en aquellos casos en que el tipo es realmente complicado o complejo de saber auto v = std::vector<int>(); // antes: std::vector<int>::iterator i = v.begin(); // ahora: auto i = v.begin();
  • 15. MADRID · NOV 27-28 · 2015 auto Necesario en aquellos casos en que el tipo es imposible de saber por el desarrollador (pero sí por el compilador en tiempo de compilación): template<typename T, typename S> void foo(T lhs, S rhs) { ????? prod = lhs * rhs; // code... }
  • 16. MADRID · NOV 27-28 · 2015 decltype Similar a auto en su concepción, pero decltype deduce un tipo en base a una expresión pasada a decltype: decltype(10) a; // a es int decltype(2*3.0) b; // b es double Necesario cuando el tipo de retorno de una función no es conocido por el desarrollador (pero sí por el compilador en tiempo de compilación)
  • 17. MADRID · NOV 27-28 · 2015 decltype ¿Cual es el tipo de retorno de la función? Dependerá de los tipos T y S resueltos en compilación. template<typename T, typename S> ???? foo(T lhs, S rhs) { auto prod = lhs * rhs; return prod; }
  • 18. MADRID · NOV 27-28 · 2015 decltype Problema: La idea es correcta pero no compila porque lhs y rhs no están definidos al usar decltype template<typename T, typename S> decltype(lhs * rhs) foo(T lhs, S rhs) { auto prod = lhs * rhs; return prod; }
  • 19. MADRID · NOV 27-28 · 2015 trailing return type syntax Se puede especificar el tipo del valor de retorno de una función al final de la firma, usando -> int sum(int a, int b) {...} auto sum (int a, int b) -> int {...}
  • 20. MADRID · NOV 27-28 · 2015 decltype Ahora lhs y rhs estan definidos al usar decltype template<typename T, typename S> auto foo(T lhs, S rhs)-> decltype(lhs * rhs) { auto prod = lhs * rhs; return prod; }
  • 21. MADRID · NOV 27-28 · 2015 Referencias Usa referencias antes que punteros siempre que sea posible. Las referencias siempre apuntan a un objeto siendo mucho más seguras que un puntero Muchas de las cosas que hacemos con punteros pueden ser resueltas con referencias.
  • 22. MADRID · NOV 27-28 · 2015 Gestión de la memoria 1. La diferencia fundamental entre new y delete por una parte, y malloc() y free() por otra es que los primeros crean y destruyen objetos, mientras que los segundos se limitan a reservar y liberar zonas de memoria 2. Al utilizar delete (lo mismo sucede con free()), se libera la zona de memoria a la que apunta, pero sin borrar el propio puntero. Si se manda liberar lo apuntado por un puntero nulo no pasa nada especial y el programa no libera memoria. Sin embargo si se ordena liberar dos veces lo apuntado por un puntero las consecuencias son imprevisibles y puede que incluso catastróficas, por lo que es importante evitar este tipo de errores http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/manualcpp.pdf (pags 30,31)
  • 23. MADRID · NOV 27-28 · 2015 Gestión de la memoria Si usas new y delete para gestionar la memoria... lo estás haciendo mal. Es posible conseguir en C++, liberación automática de memoria, de forma determinista y sin apenas esfuerzo. Resource Acquisition Is Initialization
  • 24. MADRID · NOV 27-28 · 2015 Gestión de la memoria - RAII std::shared_ptr<T> Encapsula el puntero a un objeto de tipo T y un contador de referencias asociado, compartido por todos los shared_ptr que apunten al mismo objeto
  • 25. MADRID · NOV 27-28 · 2015 Gestión de la memoria - RAII std::unique_ptr<T> Objeto que mantiene la propiedad exclusiva de un puntero a un objeto de tipo T. Un unique_ptr no puede ser copiado, no pueden haber dos unique_ptr apuntando al mismo objeto.
  • 26. MADRID · NOV 27-28 · 2015 RAII RAII se aplica no solo a memoria si no en general en cualquier tipo de recurso: class file { public: file( const char* filename ) : m_file_handle(std::fopen(filename, "w+")) { } ~file() { std::fclose(m_file_handle) ; } private: std::FILE* m_file_handle ; file( const file & ) ; file & operator=( const file & ) ; } ; void example_with_RAII() { // open file (acquire resource) file logfile("logfile.txt"); // Use the resource. When exiting by going out // of scope // for any reason (including exceptions) file will // be closed. No action needed to release the // resource. }
  • 27. MADRID · NOV 27-28 · 2015 Expresiones lambda Permiten definir closures de forma muy sencilla, manteniendo en todo momento el control de qué variables se quieren capturar. [](int i)->int {return i * 2; }; Captura de variables Parámetros Tipo retorno Código
  • 28. MADRID · NOV 27-28 · 2015 Expresiones lambda Una expresión lambda... ¿Devuelve un puntero a función? ¡NO! Devuelve un objeto que tiene operator() definido
  • 29. MADRID · NOV 27-28 · 2015 Tipo de expresión lambda Una expresión lambda tiene un tipo propio y único generado por el compilador, pero que es convertible al tipo function<T> siendo T la firma de la función. P. ej. El tipo function<R(T,S)> representa una lambda que tiene dos parámetros de tipo T y S y que devuelve un valor de tipo T
  • 30. MADRID · NOV 27-28 · 2015 Expresiones lambda template Una expresión lambda puede tener parámetros template La palabra clave auto indica que el tipo del parámetro es autodeducido auto lambda_sum = [](auto x, auto y) { return x + y; }; ¡Esto es un template no inferencia de tipos!
  • 31. MADRID · NOV 27-28 · 2015 ¿Hay más? Por supuesto.... Hay mucho más. C++11 incluye muchas otras características: 1. Move semantics (r-value references) 2. override/final 3. type traits 4. Funciones deleted y defaulted 5. Variadic templates 6. Más...
  • 32. MADRID · NOV 27-28 · 2015 ¿Donde seguir? http://www.stroustrup.com/C++11FAQ.html https://en.wikipedia.org/wiki/C%2B%2B11 https://en.wikipedia.org/wiki/C%2B%2B14 https://isocpp.org/wiki/faq/cpp11-language https://isocpp.org/wiki/faq/cpp14-language The C++ standard book: http://www.amazon.es/The-Programming-Language- Bjarne-Stroustrup/dp/0321958322/
  • 33. MADRID · NOV 27-28 · 2015 Gracias!!!!! Eduard Tomàs etomas@gmail.com @eiximenis http://geeks.ms/blogs/etomas