C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento &...
-
Upload
mvp-showcast -
Category
Technology
-
view
1.766 -
download
2
description
Transcript of C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento &...
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
MVP ShowCast 2013
C++11 e C++14 no Visual Studio 2013
Rodrigo Strauss
Visual C++
Sócio Gerente – Intelitrader
@rodrigostrauss
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
O que é o C++?
♦Linguagem derivada do C, adicionando os seguintes recursos:♦ Orientação à objeto (classes)
♦ Exceções
♦ Templates
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Características
♦Tipagem estática
♦Genérica
♦Compatível com linguagem C
♦Compilada
♦Gerenciamento de memória manual
♦Previsível
♦30 anos de uso e refinamento
♦Performance
♦Compatibilidade
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Sistemas alvo
♦System Programming
♦Embarcados
♦Softwares de prateleira
♦Server side
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
De onde viemos?
Assembler
Cobol
Fortran
C++
C
Simula
C++11
Java
C#BCPL
8
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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)
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Versões do C++
♦C++84
♦C++98
♦C++03
♦C++11 (antes chamada de C++0x)
♦C++14
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
C++84
♦C com classes
♦Primeira implementação foi feita como um préprocessador C
♦Feita por Bjarne Stroustrup, pesquisador da AT&T
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
C++98
♦Primeira versão padronizada pela ISO
♦Contém as características principais, como classes e STL
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
C++03
♦Correção de bugs no padrão
♦Nenhuma funcionalidade nova, basicamente um bugfix do padrãoC++98
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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 aopadrão C++
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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; }
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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; };
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Uniform Initialization and Delegating Constructors
#include <string>
using namespace std;
class class_a {
public:
class_a() {}
class_a(string str) : m_string{ str } {}
class_a(string str, double dbl) : m_string{ str }, m_double{ dbl } {}
double m_double;
string m_string;
};
int main()
{
class_a c1{};
class_a c1_1;
class_a c2{ "ww" };
class_a c2_1("xx");
// order of parameters is the same as the constructor
class_a c3{ "yy", 4.4 };
class_a c3_1("zz", 5.5);
}
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
}
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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;
}
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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 };
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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;});
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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; } );
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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*)
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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 templatestemplate<typename T>
auto func(T a, T b) -> decltype(a+b) { return a + b; }
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Funções de uma classes
♦delete
♦default
♦final
♦override
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Rvalue reference
♦Possibilita mover um rvalue
♦Aumenta performance por remover cópias
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Move semantics e Rvalue references
♦ Possibilita descobrir quando um objeto é temporário e mover os dados ao invésde 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;
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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;
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
static_assert
♦Checar condições em tempo de compilação
♦Útil para programação com templates
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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) );
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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;
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
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
SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.
Perguntas & Respostas