39
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

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

Embed Size (px)

DESCRIPTION

Palestra: C++11 e C++14 no Visual Studio 2013 Palestrante: Rodrigo Strauss Realização: 10/12/2013 17h Trilha: Ferramentas de desenvolvimento & Linguagens de programação Sessão: Desenvolvimento Evento: MVP ShowCast 2013 Site: http://mvpshowcast.azurewebsites.net

Citation preview

Page 1: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

MVP ShowCast 2013

C++11 e C++14 no Visual Studio 2013

Rodrigo Strauss

Visual C++

Sócio Gerente – Intelitrader

@rodrigostrauss

Page 2: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 3: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 4: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 5: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

O que é o C++?

♦Linguagem derivada do C, adicionando os seguintes recursos:♦ Orientação à objeto (classes)

♦ Exceções

♦ Templates

Page 6: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 7: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

Sistemas alvo

♦System Programming

♦Embarcados

♦Softwares de prateleira

♦Server side

Page 8: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

De onde viemos?

Assembler

Cobol

Fortran

C++

C

Simula

C++11

Java

C#BCPL

8

Page 9: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 10: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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)

Page 11: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 12: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 13: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

Versões do C++

♦C++84

♦C++98

♦C++03

♦C++11 (antes chamada de C++0x)

♦C++14

Page 14: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

C++84

♦C com classes

♦Primeira implementação foi feita como um préprocessador C

♦Feita por Bjarne Stroustrup, pesquisador da AT&T

Page 15: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

C++98

♦Primeira versão padronizada pela ISO

♦Contém as características principais, como classes e STL

Page 16: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

C++03

♦Correção de bugs no padrão

♦Nenhuma funcionalidade nova, basicamente um bugfix do padrãoC++98

Page 17: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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++

Page 18: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 19: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 20: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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; }

Page 21: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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; };

Page 22: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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);

}

Page 23: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

}

Page 24: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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;

}

Page 25: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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 };

Page 26: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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;});

Page 27: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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; } );

Page 28: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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*)

Page 29: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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 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; }

Page 30: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

Funções de uma classes

♦delete

♦default

♦final

♦override

Page 31: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

Rvalue reference

♦Possibilita mover um rvalue

♦Aumenta performance por remover cópias

Page 32: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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;

Page 33: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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;

Page 34: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

static_assert

♦Checar condições em tempo de compilação

♦Útil para programação com templates

Page 35: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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) );

Page 36: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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;

Page 37: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 38: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

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

Page 39: C++11 e C++14 no Visual Studio 2013 [MVP ShowCast 2013 - DEV - Ferramentas de desenvolvimento & Linguagens de programaçã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.

Perguntas & Respostas