Contenu connexe Similaire à C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programação] (20) C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programação]1. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
MVP ShowCast 2013
C++11 e C++14 no Visual Studio 2013
Rodrigo Strauss
Visual C++
Sócio Gerente – Intelitrader
@rodrigostrauss
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
2. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Grupo C & C++ Brasil
♦Nasceu da vontade de conhecer outras áreas de uso para C & C++
♦Grupo de entusiastas/aficcionados
♦Aberto à todos
♦Organiza eventos para reunir profissionais, estudantes, e entusiasta
♦Grupo mais multilinguagem que eu conheço
♦groups.google.com/group/ccppbrasil/
♦#ccppbrasil
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
3. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Eu, eu e eu
♦ Escovador de bits
♦ Sócio Programador da Intelitrader
♦ Server side is my side
♦ Uso C++ porque resolve meus problemas, uso bastante Python também
♦ mercado financeiro segurança da informação mercado financeiro segurança da
informação .NET segurança da informação mercado financeiro
♦ Windows ou Linux? Fico com os dois, porque ainda não estudei BSD ou
Solaris
♦ Três projetos Open Source egoístas: OmniObjects, Tio e Primo
♦ @rodrigostrauss
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
4. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
wanderley at caloni at low level
♦Cofundador do grupo C & C++ Brasil
♦Programador entusiasta (Basic YES!): 1 ano
♦C/C++ Maniac: 2 anos
♦Segurança da Informação: 10 anos
♦Mercado Financeiro: 1 ano
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
5. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
O que é o C++?
♦Linguagem derivada do C, adicionando os seguintes recursos:
♦ Orientação à objeto (classes)
♦ Exceções
♦ Templates
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
7. SESSÃO: DESENVOLVIMENTO
Sistemas alvo
♦System Programming
♦Embarcados
♦Softwares de prateleira
♦Server side
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
8. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
De onde viemos?
Fortran
Cobol
Simula
Java
C++
Assembler
BCPL
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
C
C++11
C#
8
9. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++ é portável? Mas e o Java e C#?
♦Só citarei nomes:
♦ Qt/KDE
♦ Firefox
♦ Windows, Microsoft Office, SQL Server, Visual Studio, praticamente tudo
vindo da MS
♦ Photoshop (que usa Boost)
♦ 99% dos jogos para computador e consoles. DirectX
♦ VMs do Java e .NET
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
10. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
STL
♦Biblioteca padrão do C++
♦Dividida em
♦ Containers (vector, map, list)
♦ Interator
♦ Abstração para acessar e percorrer itens de um container de maneira uniforme
♦ Algoritmos (find, sort)
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
11. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++ sem STL é C com classes
♦E C++ sem Boost é C+=0.5f...
♦Java/C#/Python/[coloque-algo-aqui] são bons mas...
♦ Eu quero continuar usando C++. Me chame de masoquista se quiser
♦ Eu preciso de controle total, inclusive na alocação da memória
♦ Tudo que a minha empresa fez já está em C++
♦ Preciso de algo multiplataforma de verdade
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
12. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Boost
♦Conjunto de bibliotecas feitas pela comunidade (mais de 100)
♦Supre a necessidade de um Frameword ou Class Library abrangente,
como as existente no C#, Java, Python, etc
♦Vários domínios
♦ Regex
♦ Asio (rede)
♦ FileSystem
♦ Metaprogramação
♦ Gerenciamento de memória (shared_ptr)
♦ Containers
♦ Comunicação entre processos
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
13. SESSÃO: DESENVOLVIMENTO
Versões do C++
♦C++84
♦C++98
♦C++03
♦C++11 (antes chamada de C++0x)
♦C++14
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
14. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++84
♦C com classes
♦Primeira implementação foi feita como um préprocessador C
♦Feita por Bjarne Stroustrup, pesquisador da AT&T
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
15. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++98
♦Primeira versão padronizada pela ISO
♦Contém as características principais, como classes e STL
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
16. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++03
♦Correção de bugs no padrão
♦Nenhuma funcionalidade nova, basicamente um bugfix do padrão
C++98
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
17. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++TR1
♦TR1 = Technical Report
♦Proposta para adiconar mais bibliotecas à STL
♦ std::function
♦ Tuplas
♦ Hash Tables (unordered_map)
♦ std::array
♦ Regex
♦Basicamente uma proposta para adicionar bibliotecas do Boost ao
padrão C++
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
18. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++11
♦Primeiro grande avanço da linguagem desde sua padronização
♦Uma tonelada de recursos foram adicionados à linguagem
♦Facilidades de linguagens modernas
♦Facilidade para ensino
♦Melhorias na biblioteca padrão
♦Acabar com “gambiarras” do Boost
♦ lambda
♦ assert
♦ bind
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
19. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
C++14
♦Correções e pequenas melhorias no padrão C++11
♦ Lambdas genéricos
♦ Melhorias na dedução de tipos
♦ User defined literal para tipos da STL
♦ auto s = s”Bom dia José Arroela”; // isso é uma string STL
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
20. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Auto e decltype
♦auto
♦ Deduz o tipo da variável pelo tipo da expressão rvalue na atribuição
for(auto i = v.begin() ; i != v.end() ; ++i)
{}
auto a = 10;
decltype(a) b;
int x;
double y;
decltype(x + y) z;
template <typename T, typename U>
auto Add (T const & a, U const & b) -> decltype(a + b)
{ return a + b; }
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
21. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Auto
C++98
C++11
map<int,string>::iterator i = m.begin();
double const xlimit = config["xlimit"];
singleton& s = singleton::instance();
auto i = begin(m);
auto const xlimit = config["xlimit"];
auto& s = singleton::instance();
binder2nd<greater> x = bind2nd( greater(), 42 );
auto x = [](int i) { return i > 42; };
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
22. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Uniform Initialization and Delegating
Constructors
#include <string>
int main()
using namespace std;
{
class_a c1{};
class_a c1_1;
class class_a {
public:
class_a c2{ "ww" };
class_a() {}
class_a c2_1("xx");
class_a(string str) : m_string{ str } {}
class_a(string str, double dbl) : m_string{ str },
m_double{ dbl } {}
// order of parameters is the same as the constructor
double m_double;
class_a c3_1("zz", 5.5);
string m_string;
};
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
class_a c3{ "yy", 4.4 };
}
23. SESSÃO: DESENVOLVIMENTO
Inicialização
class class_d {
public:
float m_float;
string m_string;
wchar_t m_char;
};
int main()
{
class_d d1{};
class_d d1{ 4.5 };
class_d d2{ 4.5, "string" };
class_d d3{ 4.5, "string", 'c' };
class_d d4{ "string", 'c' }; // erro de compilação
class_d d5("string", 'c', 2.0 }; // erro de compilação
}
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
24. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Nova sintaxe para funções e decltype
template <typename Builder>
auto
makeAndProcessObject (const Builder& builder) -> decltype( builder.makeObject() )
{
auto val = builder.makeObject();
// modifica o val
return val;
}
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
25. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Initializer lists
C++98
C++11
rectangle
w( origin(), extents() );
complex<double> c ( 2.71828, 3.14159 );
int
a[] = { 1, 2, 3, 4 };
vector<int>
v;
for( int i = 1; i <= 4; ++i ) v.push_back(i);
rectangle
w { origin(), extents() };
complex<double> c { 2.71828, 3.14159 };
int
a[] { 1, 2, 3, 4 };
vector<int>
v { 1, 2, 3, 4 };
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
26. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Lambda
♦Possibilidade de criar funções anônimas
♦Muito útil para algoritmos
♦Boost bind nunca mais!
♦Até onde eu sei, a implementação mais, digamos, detalhada
♦ Especificação de captura e escopo
for_each(
v.begin(),
v.end(),
[](string a) {cout << a;});
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
27. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Lambda
C++98
C++11
vector<int>::iterator i = v.begin();
for( ; i != v.end(); ++i ) {
if( *i > min && *i < max )
break;
}
auto min = 10;
auto max = 20;
auto i = find_if( begin(v), end(v), [=](int i) {
return i > min && i < max;
} );
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
28. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Nullptr
♦Constante para ponteiro nulo, e não mais um #define NULL 0
♦Resolve o problema de overload de funções para int ou xpto*
void f(void*);
void f(int);
// …
f(NULL); // chama a f(int)
f(nullptr); // chama a f(void*)
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
29. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Nova sintaxe para declarar funções
♦Tipo de retorno depois da função
♦auto func(int a, int b) -> int { return a + b; }
♦Útil para templates
template<typename T>
auto func(T a, T b) -> decltype(a+b) { return a + b; }
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
30. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Funções de uma classes
♦delete
♦default
♦final
♦override
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
31. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Rvalue reference
♦Possibilita mover um rvalue
♦Aumenta performance por remover cópias
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
32. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Move semantics e Rvalue references
♦ Possibilita descobrir quando um objeto é temporário e mover os dados ao invés
de copiar.
♦ Usa nova sintaxe de referência
Matrix operator+(const Matrix& a, const Matrix& b)
{
Matrix r;
// copia os itens de a e b para a matriz r
return r;
}
Matrix res = a+b;
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
33. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Move Semantics
class Matrix {
Representation rep;
Matrix(Matrix&& a)
// move constructor
{
rep = a.rep;
// “rouba” os elementos da matriz a
a.rep = {}; // zera a matrix temporária
}
};
Matrix res = a+b;
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
34. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
static_assert
♦Checar condições em tempo de compilação
♦Útil para programação com templates
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
35. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Range-based for-loop
C++98
C++11
for( vector<int>::iterator i = v.begin(); i != v.end(); ++i ) {
total += *i;
}
for( auto d : v ) {
total += d;
}
sort( v.begin(), v.end() );
sort( &a[0], &a[0] + sizeof(a)/sizeof(a[0]) );
sort( begin(v), end(v) );
sort( begin(a), end(a) );
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
36. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
shared_ptr
C++98
C++11
widget* pw = new widget();
delete pw;
auto pw = make_shared<widget>();
class node {
vector<node*> children;
node* parent;
class node {
vector<unique_ptr<node>> children;
node* parent;
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
37. SESSÃO: DESENVOLVIMENTO
E muito mais
♦ Variadic Templates
♦ String literals
♦ Utf8 (u8), utf16 (u) e utf32 (U)
• Enum tipado
♦ Sintaxe para inicialização uniforme
♦ Constructor delegate
♦ sizeof(SomeType::member);
♦ “Isso não é um shift!”
♦ Template alias
♦ Unrestricted unions
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
38. SESSÃO: DESENVOLVIMENTO
TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
Compatibilidade do Visual C++ 2013
♦Quase tudo do C++11
♦ Mas não suporta tudo, o que tem causado críticas da comunidade
♦Algumas coisas de C++14
♦ O padrão ainda não saiu, então o time do Visual C++ está implementando as
coisas que faltaram no C++11, como make_unique
♦ Tabela extensiva em:
♦ http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.