Las novedades de C++ 11 de la mano de Albert Astals Cid, realizada dentro de Akademy.-es 2016 de Madrid en Medialab Prado. Conozcan que hay de nuevo en este famoso lenguaje de programción
1. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Novedades de C++11
Albert Astals Cid
2. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Novedades de C++11
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
¿Quien es Albert Astals Cid?
Ingeniero en Informática por la UPC
Traductor en KDE desde 2002
Programador en KDE desde 2003
Mantenedor de KPDF/Okular desde 2004
Miembro de KDE eV desde 2005, actualmente en la Junta Directiva
Miembro fundador de KDE España, ex-presidente
NO SOY UN EXPERTO EN C++11
3. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
¿Qué es C++11?
C++11 is a version of the standard for the
programming language C++. It was approved by
International Organization for Standardization (ISO)
on 12 August 2011, replacing C++03, and
superseded by C++14 on 18 August 2014.
It was formerly named C++0x because it was
expected to be published before 2010.
4. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
¿Lo cualo?
Que C++ puede
hacer más!
...
5. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Range-base for loop
int lista[2];
for (int i : lista)
std::cout << i << std::endl;
std::list<int> lista2;
for (int i : lista2)
std::cout << i << std::endl;
Cuidado con los contenedores de Qt!
6. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
auto
int lista[2];
for (auto i : lista)
std::cout << i << std::endl;
std::list<int> lista2;
for (auto i : lista2)
std::cout << i << std::endl;
auto *x = new Foo();
auto i = 3;
auto k = object->bar();
7. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Lambdas
auto func = [](int x, int y) { return x + y; };
std::cout << func(3, 4) << std::endl;
[capture](parameters) -> return_type { function_body }
capture puede ser
[]
[x, &y]
[&]
[=]
[&, x]
[=, &z]
8. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Lambdas (y 2)
std::vector<int> some_list;
int total = 0;
std::for_each(begin(some_list), end(some_list), [&total](int x) { total += x; });
QObject::connect(myTimer, &QTimer::timeout, [] { do_something() });
9. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Constructores anidados
class MiClase
{
public:
MiClase(int number) : m_number(number) {}
MiClase() : MiClase(42) {}
private:
int m_number;
};
10. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Inicialización de variables en definición
class MiClase
{
public:
MiClase() {}
private:
int m_number = 42;
};
11. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Override
struct Base {
virtual void some_func(float);
};
struct Derived : Base {
virtual void some_func(int); // Seguro que es lo que querias?
};
struct Derived2 : Base {
void some_func(int) override; // Meeec
};
12. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Final
struct Base1 final { };
struct Derived1 : Base1 {}; // Meeec
struct Base2 {
virtual void some_func(int);
};
struct Derived2 : Base2 {
void some_func(int) final override;
};
struct Derived3 : Derived2 {
void some_func(int) override; // Meeec
};
13. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
nullptr
struct MiClase { };
static void func(int i) { std::cout << "Entero " << i << std::endl; }
static void func(MiClase *mc) { std::cout << "MiClase " << mc << std::endl; }
int main(int argc, char **argv)
{
func(NULL); // Meeec, error o func(int) dependiendo del compilador
func(nullptr);
}
14. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Inicialización uniforme
class IdString {
public:
std::string name;
int identifier;
};
IdString get_string() {
return {"foo", 42};
}
15. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Enums con tipo
class Email
{
public:
enum Importance {
Low,
High
};
enum TrustLevel { // MEEEEEEEEEC
Low,
High
};
};
16. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Enums con tipo (y 2)
class Email
{
public:
enum class Importance { Low, High };
enum class TrustLevel { Low, High };
};
void func() {
TrustLevel tl = TrustLevel::Low;
if (tl == Importance::Low) { // Meeeec, en C++03 warning dependiendo de flags
}
}
17. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
constexpr
constexpr int get_five() {return 5;}
int some_value[get_five() + 7];
18. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Cosas «básicas»
Multithreading (std::thread, std::mutex, etc.)
Smart pointers
Hash tables
Expresiones regulares
19. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
Y Más!
Move constructors
Extern templates
Template aliases
Varidic templates
División de tipos POD en trivial y standard-layout
Unrestricted unions
...
...
...
20. Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2016 – Madrid - Albert Astals Cid <aacid@kde.org> - @tsdgeos
Novedades de C++11Novedades de C++11
¿Preguntas?