SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
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.
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.
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.
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.
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.
SESSÃO: DESENVOLVIMENTO

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
© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
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
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
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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 };
}
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
SESSÃO: DESENVOLVIMENTO

TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO

Perguntas & Respostas

© 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.

Mais conteúdo relacionado

Semelhante a C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programação]

Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Renato Groff
 
MVPShowCast - HDInsight Primeiros Passos com BigData
MVPShowCast - HDInsight Primeiros Passos com BigDataMVPShowCast - HDInsight Primeiros Passos com BigData
MVPShowCast - HDInsight Primeiros Passos com BigDataDiego Nogare
 
Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018Renato Groff
 
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020Renato Groff
 
Containers no Ambiente de Desenvolvimento - mvp conf latam 2019
Containers no Ambiente de Desenvolvimento - mvp conf latam 2019Containers no Ambiente de Desenvolvimento - mvp conf latam 2019
Containers no Ambiente de Desenvolvimento - mvp conf latam 2019Luiz Carlos Faria
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaRodrigo Marques Teixeira
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com pythonBruno Rocha
 
Microsoft opensource
Microsoft opensourceMicrosoft opensource
Microsoft opensourceCDS
 
Microsoft opensource
Microsoft opensourceMicrosoft opensource
Microsoft opensourceCDS
 
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018Renato Groff
 
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Renato Groff
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Renato Groff
 
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...Renato Groff
 
Typescript no fronte no back com Docker
Typescript no fronte no back com DockerTypescript no fronte no back com Docker
Typescript no fronte no back com DockerMVP Microsoft
 
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018Renato Groff
 
MVP ShowCast 2014 - O dia a dia do Cientista de Dados
MVP ShowCast 2014 - O dia a dia do Cientista de DadosMVP ShowCast 2014 - O dia a dia do Cientista de Dados
MVP ShowCast 2014 - O dia a dia do Cientista de DadosDiego Nogare
 
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018Renato Groff
 

Semelhante a C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programação] (20)

Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
 
MVPShowCast - HDInsight Primeiros Passos com BigData
MVPShowCast - HDInsight Primeiros Passos com BigDataMVPShowCast - HDInsight Primeiros Passos com BigData
MVPShowCast - HDInsight Primeiros Passos com BigData
 
Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018
 
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
Docker: dicas e truques para o dia a dia | MVPConf Latam 2020
 
Containers no Ambiente de Desenvolvimento - mvp conf latam 2019
Containers no Ambiente de Desenvolvimento - mvp conf latam 2019Containers no Ambiente de Desenvolvimento - mvp conf latam 2019
Containers no Ambiente de Desenvolvimento - mvp conf latam 2019
 
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / GoiâniaAzure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
Azure Bootcamp 2018 - DevOps para profissionais de Infra - Infomach / Goiânia
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
 
Microsoft opensource
Microsoft opensourceMicrosoft opensource
Microsoft opensource
 
Microsoft opensource
Microsoft opensourceMicrosoft opensource
Microsoft opensource
 
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
Docker + Bancos de Dados: isto é possível? - Databases SP - Março-2018
 
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Gt 10 fcsi
Gt 10   fcsiGt 10   fcsi
Gt 10 fcsi
 
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
Descomplicando a montagem de ambientes de Desenvolvimento/Testes com Docker -...
 
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
Como o Microsoft Azure pode melhorar o desenvolvimento de seu Back-End? | Dev...
 
Typescript no fronte no back com Docker
Typescript no fronte no back com DockerTypescript no fronte no back com Docker
Typescript no fronte no back com Docker
 
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
Docker: introdução e primeiros passos - Baixada NERD - Junho-2018
 
MVP ShowCast 2014 - O dia a dia do Cientista de Dados
MVP ShowCast 2014 - O dia a dia do Cientista de DadosMVP ShowCast 2014 - O dia a dia do Cientista de Dados
MVP ShowCast 2014 - O dia a dia do Cientista de Dados
 
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
Docker: introdução e primeiros passos - Sorocódigos - Agosto-2018
 
Mergulhando no ecossistema .NET
Mergulhando no ecossistema .NETMergulhando no ecossistema .NET
Mergulhando no ecossistema .NET
 

Mais de MVP ShowCast

AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...
AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...
AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...MVP ShowCast
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...MVP ShowCast
 
O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...
O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...
O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...MVP ShowCast
 
Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...
Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...
Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...MVP ShowCast
 
Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...
Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...
Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...MVP ShowCast
 
Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...
Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...
Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...MVP ShowCast
 
Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...
Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...
Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...MVP ShowCast
 
Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...
Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...
Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...MVP ShowCast
 
Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]
Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]
Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]MVP ShowCast
 

Mais de MVP ShowCast (9)

AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...
AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...
AlwaysOn Failover Cluster e Availability Group em um Cenário de Disaster Reco...
 
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
Aplicações e serviços Web interoperáveis com o padrão Cross-Origin Resource S...
 
O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...
O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...
O que há de Interop no Windows Server 2012 R2 [MVP ShowCast 2013 - IT - Inter...
 
Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...
Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...
Gestão de Projetos e Processos - Muito além do trivial [MVP ShowCast 2013 - D...
 
Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...
Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...
Desvendando o Windows Azure Media Services - O que é possível fazer? [MVP Sho...
 
Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...
Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...
Dicas de publicação de aplicativos Windows 8 na Windows Store [MVP ShowCast 2...
 
Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...
Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...
Windows 8.1: O que mudou para o desenvolvedor? [MVP ShowCast 2013 - DEV - Win...
 
Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...
Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...
Desenvolvimento de jogos para a Windows Store [MVP ShowCast 2013 - DEV - Wind...
 
Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]
Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]
Como foi feito o Caça-Palavras [MVP ShowCast 2013 - DEV - Windows Phone]
 

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.
  • 6. SESSÃO: DESENVOLVIMENTO 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 © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft. TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO
  • 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.
  • 39. SESSÃO: DESENVOLVIMENTO TRILHA: FERRAMENTAS DE DESENVOLVIMENTO & LINGUAGENS DE PROGRAMAÇÃO Perguntas & Respostas © 2013, MVP ShowCast. Evento organizado por MVPs do Brasil com apoio da Microsoft.