Buscar

Documentação Visual Studio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 309 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 309 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 309 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ContentsContents
 Microsoft C/C++ no Visual Studio
 C++ no Visual Studio
 Visão geral do desenvolvimento em C++ no Visual Studio
 Novidades do C++ no Visual Studio
 Aprimoramentos de conformidade do C++ no Visual Studio
 Conformidade com a linguagem do Microsoft C++
 Plataformas de destino com suporte
 Ferramentas e funcionalidades do C++ em edições do Visual Studio
 Instalar o suporte C11 e C17 no Visual Studio
 Exemplos
 Ajuda e comunidade
 Como relatar um problema com o conjunto de ferramentas do Visual C++
 Tutoriais do Visual Studio C++
 Instalar o suporte ao C++ no Visual Studio
 Criar e editar um projeto de aplicativo de console C++
 Desenvolver e executar um projeto de aplicativo de console C++
 Criar uma calculadora de console em C++
 Criar um aplicativo UWP
 Criar um aplicativo da área de trabalho do Windows
 Criar um jogo DirectX
 Sistemas de build e projetos
 Ler e escrever código no Visual Studio
 Desenvolvimento da área de trabalho do Windows
 Desenvolvimento da UWP
 Desenvolvimento de jogos
 Desenvolvimento em Linux
 Desenvolvimento móvel multiplataforma
 Desenvolvimento .NET com C++/CLI
 Programação de Nuvem e da Web
https://docs.microsoft.com/windows/uwp/cpp-and-winrt-apis/get-started
https://docs.microsoft.com/windows/desktop/learnwin32/learn-to-program-for-windows
https://docs.microsoft.com/windows/uwp/gaming/tutorial--create-your-first-uwp-directx-game
file:///T:/maa1/mf4q/cpp/6a503ed6/linux/index.json
file:///T:/maa1/mf4q/cpp/6a503ed6/cross-platform/index.json
 Portar e atualizar código C++
 Práticas recomendadas de segurança para C++
 Práticas recomendadas de segurança para C++
 Executar como membro do grupo de usuários
 Como o UAC (Controle de Conta de Usuário) afeta seu aplicativo
 Diretrizes para desenvolvedores de C++ para canais do lado de execução
especulativos
 Referência
 Linguagem C/C++ e Bibliotecas padrão
 Referência de linguagens
 Linguagens
 Referência de linguagem C
 Referência da linguagem C++
 Referência de pré-processador C/C++
 Intrínsecos do compilador e linguagem assembly
 Intrínsecos do compilador
 Referência do assembler ARM
 Assembly embutido no MSVC
 Referência do MASM (Microsoft Macro Assembler)
 Extensões de componentes para .NET e UWP
 Atributos C++ para COM e .NET
 Referência de bibliotecas
 Libraries
 Referência da CRT (biblioteca em tempo de execução) C
 Referência da Biblioteca Padrão C++
 Biblioteca SafeInt
 Biblioteca SafeInt
 Classe SafeInt
 Funções (SafeInt)
 Classe SafeIntException
 MFC/ATL
 Bibliotecas paralelas
 Bibliotecas de acesso a dados
C++ no Visual Studio
12/11/2020 • 15 minutes to read • Edit Online
NOTENOTE
NOTENOTE
NOTENOTE
Esta documentação do desenvolvedor se aplica ao Visual Studio 2019. Para ver a documentação da sua versão preferida do
Visual Studio, use o controle seletor de versãoversão . Ele é encontrado na parte superior do Sumário nesta página.
Se você estiver procurando um pacote redistribuível Microsoft Visual C++ 2019, para poder executar um programa, vá para
a página de downloads do site Microsoft Visual Studio. Em todos os downloadstodos os downloads , expanda a seção outras ferramentas,outras ferramentas,
estruturas e redistribuíveisestruturas e redistribuíveis . Selecione sua arquitetura de destino e, em seguida, escolha o botão baixarbaixar .
Para redistribuíveis mais antigos, abra a página de downloads mais antiga . Expanda a seção outras ferramentas,outras ferramentas,
estruturas e redistribuíveisestruturas e redistribuíveis . Localize a versão redistribuível que você deseja baixar, selecione sua arquitetura de destino
e, em seguida, escolha o botão baixarbaixar .
Esta documentação do desenvolvedor se aplica ao Visual Studio 2017. Para ver a documentação da sua versão preferida do
Visual Studio, use o controle seletor de versãoversão . Ele é encontrado na parte superior do Sumário nesta página.
Se você estiver procurando um Microsoft Visual C++ 2017 ou um pacote redistribuível mais antigo para poder executar um
programa, acesse a página de downloads mais antigos do site do Microsoft Visual Studio. Expanda a seção outrasoutras
ferramentas, estruturas e redistribuíveisferramentas, estruturas e redistribuíveis . Localize a versão redistribuível que você deseja baixar, selecione sua
arquitetura de destino e, em seguida, escolha o botão baixarbaixar .
Esta documentação do desenvolvedor se aplica ao Visual Studio 2015. Para ver a documentação da sua versão preferida do
Visual Studio, use o controle seletor de versãoversão . Ele é encontrado na parte superior do Sumário nesta página.
Se você estiver procurando um Microsoft Visual C++ 2015 ou um pacote redistribuível mais antigo para poder executar um
programa, acesse a página de downloads mais antigos do site do Microsoft Visual Studio. Expanda a seção outrasoutras
ferramentas, estruturas e redistribuíveisferramentas, estruturas e redistribuíveis . Localize a versão redistribuível que você deseja baixar, selecione sua
arquitetura de destino e, em seguida, escolha o botão baixarbaixar .
Microsoft Visual C++ (MSVC) refere-se às ferramentas e bibliotecas de desenvolvimento de linguagem de
assembly, C++ e C, disponíveis como parte do Visual Studio no Windows. Essas ferramentas e bibliotecas
permitem que você crie aplicativos da UWP (Plataforma Universal do Windows), aplicativos de servidor e área de
trabalho Windows nativos, bibliotecas e aplicativos multiplataforma que são executados no Windows, Linux,
Android e iOS, bem como bibliotecas e aplicativos que usam o .NET Framework. Você pode usar o MSVC para
escrever tudo, desde aplicativos simples de console até os aplicativos mais sofisticados e complexos para o
Windows desktop, de drivers de dispositivo e componentes de sistema operacional até jogos de plataforma
cruzada para dispositivos móveis e dos menores dispositivos IoT para computação de alto desempenho de vários
servidores na nuvem do Azure.
O Visual Studio 2015, 2017 e 2019 podem ser instalados lado a lado. Você pode usar o Visual Studio 2019
(compilador de conjunto de ferramentas v142) ou o Visual Studio 2017 (v141) para editar e criar programas
usando o conjunto de ferramentas do Visual Studio 2017 (v141) e do Visual Studio 2015 (V140).
https://github.com/MicrosoftDocs/cpp-docs.pt-br/blob/live/docs/overview/visual-cpp-in-visual-studio.md
https://visualstudio.microsoft.com/downloads/
https://visualstudio.microsoft.com/vs/older-downloads/
https://visualstudio.microsoft.com/vs/older-downloads/
https://visualstudio.microsoft.com/vs/older-downloads/
Histórico de novidades e de conformidade
Instalar o Visual Studio e atualizar de versões anteriores
Aprender sobre o C++
Ferramentas de desenvolvimento do C++
O que há de novo para C++ no Visual Studio
Descubra as novidades do Visual Studio.
O que há de novo para C++ no Visual Studio 2003 até 2015
Descubra quais foram as novidades do C++ para cada versão do Visual Studio, de 2003 até 2015.
Melhorias de conformidade do C++ no Visual Studio
Saiba mais sobre as melhorias de conformidade do C++ no Visual Studio.
Tabela de conformidade da linguagem Microsoft C++
Uma lista de status de conformidade por recurso no compilador C++ do MSVC.
Histórico de alterações do Microsoft C/C++ 2003-2015
Saiba mais sobre as alterações significativas nas versões anteriores.
Instalar o suporte a C++ no Visual Studio
Baixe o Visual Studio e instale o conjunto de ferramentas do Microsoft C/C++.
Guia de atualização e portabilidade do Microsoft C++
Diretrizes para portabilidade de código e para atualização de projetos para o Visual Studio 2015 ou posterior para
aproveitar a maior conformidade do compilador com o padrão do C++, além de tempos de compilação e
recursos de segurança muito aprimorados como a mitigação do Spectre.
Ferramentas e recursos do C++ nas edições do Visual Studio
Descubra as diferentes edições do Visual Studio.
Plataformas com suporte
Descubra em quais plataformas o compilador do Microsoft C/C++ dá suporte.
Bem-vindo de volta ao C++
Saibamais sobre as técnicas de programação modernas do C++ com base no C++11 e versões posteriores que
permitem que você escreva código rápido e seguro e evite muitas armadilhas do estilo de programação em C.
C++ padrão
Saiba mais sobre o C++, obtenha uma visão geral do C++ Moderno e encontre links para livros, artigos, links e
eventos
Aprenda o Visual Studio e crie seu primeiro projeto C++
Comece a aprender a escrever C++ no Visual Studio.
Amostras do Visual Studio C++
Informações sobre os exemplos de código C++ fornecidos pela Microsoft.
Visão geral do desenvolvimento em C++ no Visual Studio
Como usar o IDE do Visual Studio para criar projetos, editar código, vincular a bibliotecas, compilar, depurar, criar
testes de unidade, fazer análise estática, implantar e muito mais.
Projetos e sistemas de compilação
Como criar e configurar projetos do Visual Studio C++, projetos CMake e outros tipos de projetos com as opções
de compilador e vinculador do MSVC.
https://docs.microsoft.com/pt-br/cpp/porting/visual-cpp-what-s-new-2003-through-2015
https://docs.microsoft.com/pt-br/cpp/porting/visual-cpp-change-history-2003-2015
https://docs.microsoft.com/pt-br/cpp/cpp/welcome-back-to-cpp-modern-cpp
https://isocpp.org/
Escrever aplicativos em C++
Referência de linguagens
Escrevendo e Refatorando o código do C++
Como usar os recursos de produtividade no editor do C++ para refatorar, navegar, entender e escrever código.
Depuração de código nativo
Use o depurador do Visual Studio com projetos C++.
Visão geral da análise de código para C/C++
Use anotações de SAL ou os verificadores das Diretrizes Principais do C++ para executar análise estática.
Escrever testes de unidade para C/C++ no Visual Studio
Crie testes de unidade usando a Estrutura de Teste de Unidade da Microsoft para C++, Google Test, Boost.Test ou
CTest.
Aplicativos universais do Windows (C++)
Encontre guias e conteúdo de referência no Centro de Desenvolvedores do Windows. Para obter informações de
como desenvolver aplicativos UWP, confira Introdução à Plataforma Universal do Windows e Criar um app "Hello
world" em C++.
Aplicativos de desktop (C++)
Saiba como criar aplicativos da área de trabalho tradicionais, nativos, em C++ para Windows.
Programação .NET com C++/CLI
Saiba como criar DLLs que permitem a interoperabilidade entre programas nativos em C++ e no .NET escritos
em linguagens como C# ou Visual Basic.
Programação em Linux
Use o Visual Studio IDE para codificar e implantar em um computador Linux remoto para compilação com GCC.
Criar DLLs C/C++ no Visual Studio
Descubra como usar o Win32, o ATL e o MFC para criar DLLs de área de trabalho do Windows e fornece
informações sobre como compilar e registrar sua DLL.
Programação paralela
Saiba como usar a Biblioteca de Padrões Paralelos, C++ AMP, OpenMP e outros recursos que estão relacionados
ao multithreading no Windows.
Práticas recomendadas de segurança
Saiba como proteger aplicativos contra código mal-intencionado e de uso não autorizado.
Programação na nuvem e na Web
No C++ há várias opções para conectar-se com a Web e com a nuvem.
Acesso a dados
Conecte-se a bancos de dados usando ODBC e OLE DB.
Texto e cadeias de caracteres
Saiba mais sobre como trabalhar com formatos e codificações diferentes de texto e de cadeia de caracteres para
desenvolvimento local e internacional.
Referência da linguagem C++
O guia de referência para a implementação da Microsoft da linguagem de programação C++.
Referência de pré-processador do C/C++
https://docs.microsoft.com/pt-br/cpp/ide/writing-and-refactoring-code-cpp
https://docs.microsoft.com/pt-br/visualstudio/debugger/debugging-native-code
https://docs.microsoft.com/pt-br/cpp/code-quality/code-analysis-for-c-cpp-overview
https://docs.microsoft.com/pt-br/visualstudio/test/writing-unit-tests-for-c-cpp
https://docs.microsoft.com/pt-br/windows/uwp/get-started/universal-application-platform-guide
https://docs.microsoft.com/pt-br/windows/uwp/get-started/create-a-basic-windows-10-app-in-cpp
https://docs.microsoft.com/pt-br/cpp/windows/desktop-applications-visual-cpp
file:///T:/maa1/mf4q/cpp/6a503ed6/linux/index.json
https://docs.microsoft.com/pt-br/cpp/build/dlls-in-visual-cpp
https://docs.microsoft.com/pt-br/cpp/text/text-and-strings-in-visual-cpp
Bibliotecas do C++ no Visual Studio
Bibliotecas C++ de software livre de terceiros
Comentários e comunidade
Uma referência comum ao pré-processador de linguagem C e C++ compartilhado.
Referência da linguagem C
O guia de referência para a implementação da linguagem de programação C da Microsoft.
Intrínsecos do compilador e linguagem do assembly
Guias para o compilador intrínsecos com suporte ou implementados pelos compiladores C/C++ da Microsoft em
cada plataforma.
As seções a seguir fornecem informações sobre as diferentes bibliotecas do C e C++ que estão incluídas no
Visual Studio.
Referência da biblioteca de tempo de execução C
Inclui alternativas aprimoradas de segurança a funções que são conhecidas por impor problemas de segurança.
Biblioteca padrão do C++
A Biblioteca Padrão do C++.
Active Template Library (ATL)
Compatibilidade com aplicativos e componentes COM.
Bibliotecas do Microsoft Foundation Class (MFC)
Suporte para criação de aplicativos da área de trabalho com interfaces de usuário tradicionais ou no estilo Office.
Biblioteca de padrões paralelos (PPL)
Algoritmos assíncronos e paralelos que são executados na CPU.
C++ AMP (C++ Accelerated Massive Parallelism)
Algoritmos totalmente paralelos que são executados na GPU.
WRL (biblioteca de modelos de Windows Runtime)
Aplicativos UWP (Plataforma Universal do Windows) e componentes.
Programação .NET com C++/CLI
Programação para o CLR (Common Language Runtime).
A ferramenta de linha de comando vcpkgvcpkg multiplataforma simplifica bastante a descoberta e a instalação de
mais de 900 bibliotecas C++ de software livre. Consulte vcpkg: gerenciador de pacotes de C++ para Windows.
Microsoft Docs Q&A
Microsoft Docs hospeda fóruns pesquisáveis para perguntas e respostas. Adicione uma C++ marca à sua
postagem para assistência da Comunidade sobre problemas relacionados ao C++.
Como relatar um problema com o conjunto de ferramentas do Microsoft C/C++
Saiba como criar relatórios de erros efetivos no conjunto de ferramentas do Microsoft C/C++ (compilador,
vinculador e outras ferramentas) e maneiras de enviar seu relatório.
Blog da equipe do Microsoft C++
Saiba mais sobre os novos recursos e as informações mais recentes dos desenvolvedores das ferramentas do
C++ no Visual Studio.
Comunidade de desenvolvedores do Visual Studio C++
https://docs.microsoft.com/pt-br/cpp/atl/atl-com-desktop-components
https://docs.microsoft.com/pt-br/cpp/mfc/mfc-desktop-applications
https://docs.microsoft.com/pt-br/cpp/parallel/concrt/parallel-patterns-library-ppl
https://docs.microsoft.com/pt-br/cpp/parallel/amp/cpp-amp-cpp-accelerated-massive-parallelism
https://docs.microsoft.com/pt-br/cpp/cppcx/wrl/windows-runtime-cpp-template-library-wrl
https://docs.microsoft.com/pt-br/cpp/build/vcpkg
https://docs.microsoft.com/pt-br/answers/topics/c%2b%2b.html
https://devblogs.microsoft.com/cppblog/
https://aka.ms/vsfeedback/browsecpp
Obtenha ajuda, arquivos de erros e faça sugestões para C++ no Visual Studio.
Visão geral do desenvolvimento em C++ no Visual
Studio
02/11/2020 • 11 minutes to read • Edit Online
Criar projetos
Como parte do IDE (Ambiente de Desenvolvimento Integrado) do Visual Studio, o MSVC (Microsoft C++)
compartilha muitas janelas e ferramentas com outras linguagens. Muitas delas, incluindo o Gerenciador deGerenciador de
SoluçõesSoluções , o editor de códigos e o depurador, estão documentadas no IDE do Visual Studio. Geralmente, uma
ferramenta ou uma janela compartilhada tem um conjunto de recursos ligeiramente diferente para o C++
comparado a outra linguagens. Algumas janelas ou ferramentas só estão disponíveis no Visual Studio Professional
ou nas edições do Visual Studio Enterprise.
Além dasferramentas compartilhadas no IDE do Visual Studio, o MSVC tem várias ferramentas especificamente
para o desenvolvimento de código nativo. Essas ferramentas também são listadas neste artigo. Para obter uma
lista de quais ferramentas estão disponíveis em cada edição do Visual Studio, confira Ferramentas e recursos do
C++ em edições do Visual Studio.
Um projeto é basicamente um conjunto de arquivos de código-fonte e recursos, como imagens ou arquivos de
dados que são compilados em um programa ou biblioteca executável.
O Visual Studio dá suporte a qualquer sistema de projeto ou ferramenta de build personalizada que você deseje
usar, com suporte total para IntelliSense, navegação e depuração:
O MSBuildMSBuild é o sistema de projeto nativo para o Visual Studio. Ao selecionar arquivoarquivo > novonovo > projetoprojeto
no menu principal, você verá muitos tipos de modelos de projeto do MSBuild que o ajudarão a desenvolver
rapidamente diferentes tipos de aplicativos em C++.
https://github.com/MicrosoftDocs/cpp-docs.pt-br/blob/live/docs/overview/overview-of-cpp-development.md
https://docs.microsoft.com/pt-br/visualstudio/get-started/visual-studio-ide
Adicionar ao controle do código-fonte
Em geral, você deve usar esses modelos para novos projetos, a menos que esteja usando projetos CMake
ou outro sistema de projeto. Para saber mais, confira Criar e gerenciar projetos baseados no MSBuild.
O CMakeCMake é um sistema de Build de plataforma cruzada que é integrado ao IDE do Visual Studio quando
você instala o desenvolvimento de desktop com a carga de trabalho do C++. É possível usar o modelo de
projeto CMake para novos projetos ou simplesmente abrir uma pasta com um arquivo CMakeLists.txt. Para
saber mais, confira Projetos CMake no Visual Studio.
Qualquer outro sistema de compilação C++, incluindo uma coleção flexível de arquivos, tem suporte por
meio do recurso abrir pastaabrir pasta . Crie arquivos JSON simples para invocar o programa de build e configurar
sessões de depuração. Para saber mais, veja Projetos Open Folder para C++.
O controle do código-fonte permite coordenar o trabalho entre diversos desenvolvedores, isolar o trabalho em
andamento do código de produção e fazer backup do código-fonte. O Visual Studio é compatível com o Git e o
TFVC (Controle de Versão do Team Foundation) por meio da janela Team ExplorerTeam Explorer .
https://docs.microsoft.com/pt-br/cpp/build/creating-and-managing-visual-cpp-projects
https://docs.microsoft.com/pt-br/cpp/build/cmake-projects-in-visual-studio
https://docs.microsoft.com/pt-br/cpp/build/open-folder-projects-cpp
https://docs.microsoft.com/pt-br/azure/devops/repos/tfvc/
Obter bibliotecas
Criar interfaces do usuário com designers
Para saber mais sobre a integração do Git com repositórios no Azure, confira Compartilhar código com o Visual
Studio 2017 e o Git do Azure Repos. Para saber mais sobre a integração do Git com o GitHub, confira Extensão do
GitHub para Visual Studio.
Use o gerenciador de pacotes vcpkg para obter e instalar bibliotecas de terceiros. No momento, mais de 900
bibliotecas open-source estão disponíveis no catálogo.
Se o programa tiver uma interface do usuário, você poderá usar um designer para populá-lo rapidamente com
controles como botões, caixas de listagem e assim por diante. Ao arrastar um controle da janela de ferramentas e
soltá-lo na superfície de design, o Visual Studio gerará os recursos e o código necessários para fazer tudo
funcionar. Em seguida, você escreverá o código para personalizar a aparência e o comportamento.
https://docs.microsoft.com/pt-br/azure/devops/repos/git/share-your-code-in-git-vs-2017
https://visualstudio.github.com/
https://docs.microsoft.com/pt-br/cpp/build/vcpkg
Escrever código
Para obter mais informações sobre como criar uma interface do usuário para um aplicativo Plataforma Universal
do Windows, consulte design e IU.
Para obter mais informações sobre como criar uma interface do usuário para um aplicativo MFC, confira
Aplicativos da área de trabalho do MFC. Para obter informações sobre programas Windows Win32, confira
Aplicativos da área de trabalho do Windows.
Depois que você cria um projeto, todos os arquivos de projeto são exibidos na janela Gerenciador de SoluçõesGerenciador de Soluções .
(Uma solução é um contêiner lógico para um ou mais projetos relacionados.) Quando você clica em um arquivo. h
ou. cpp em Gerenciador de soluçõesGerenciador de soluções , o arquivo é aberto no editor de código.
O editor de códigos é um processador de texto especializado para código-fonte C++. Ele codifica por cores os
nomes de palavras-chave, de métodos e de variáveis da linguagem e outros elementos do código para tornar o
código mais legível e mais fácil de ser entendido. Ele também fornece ferramentas para refatoração de código,
navegação entre diferentes arquivos e noções básicas sobre como o código é estruturado. Para saber mais, confira
https://developer.microsoft.com/windows/design
https://docs.microsoft.com/pt-br/cpp/mfc/mfc-desktop-applications
https://docs.microsoft.com/pt-br/cpp/windows/desktop-applications-visual-cpp
Adicionar e editar recursos
Build (compilar e vincular)
Depurar
Escrever e refatorar código.
Um programa ou DLL do Windows geralmente inclui alguns recursos , como caixas de diálogo, ícones, imagens,
cadeias de caracteres localizáveis, telas de abertura, cadeias de conexão de banco de dados ou qualquer dado
arbitrário. O Visual Studio inclui ferramentas para adicionar e editar recursos. Para obter mais informações,
consulte trabalhando com arquivos de recursos.
Escolha cr iarcr iar > solução de compilaçãosolução de compilação na barra de menus ou insira a combinação de teclas Ctr l + Shift + BCtr l + Shift + B
para compilar e vincular um projeto. Erros e avisos de compilação são relatados no Lista de Erros ( Ctr l + \ , eCtr l + \ , e ). A
janela saídasaída ( ALT + 2ALT + 2 ) mostra informações sobre o processo de compilação.
Para saber mais sobre como configurar builds, confira Como trabalhar com Propriedades de Projeto e Projetos e
sistemas de build.
Use também o compilador (cl.exe) e muitas outras ferramentas autônomas relacionadas a build, como NMAKE e
LIB, diretamente na linha de comando. Para obter mais informações, confira Compilar o código C/C++ na linha de
comando e Referência de build do C/C++.
É possível iniciar a depuração pressionando F5F5 . A execução pausa em todos os pontos de interrupção que você
definiu (pressionando F9F9 ). Você também pode percorrer o código uma linha por vez ( F10F10 ), exibir os valores das
variáveis ou dos registros e, mesmo em alguns casos, fazer alterações no código e continuar a depuração sem
precisar compilá-la novamente. A ilustração a seguir mostra uma sessão de depuração em que a execução é
pausada no ponto de interrupção. Os valores dos membros da estrutura de dados são visíveis na janelajanela
InspeçãoInspeção .
https://docs.microsoft.com/pt-br/cpp/ide/writing-and-refactoring-code-cpp
https://docs.microsoft.com/pt-br/cpp/windows/working-with-resource-files
https://docs.microsoft.com/pt-br/cpp/build/working-with-project-properties
https://docs.microsoft.com/pt-br/cpp/build/building-on-the-command-line
https://docs.microsoft.com/pt-br/cpp/build/reference/c-cpp-building-reference
Teste
Analisar
Implantar aplicativos concluídos
Para obter mais informações, consulte Depuração no Visual Studio.
O Visual Studio inclui o Microsoft Unit Test Framework para C++, além de suporte para Boost.Test, Google Test e
CTest. Execute os testes na janela do Gerenciador de TestesGerenciador de Testes :
Para saber mais, confira Verificar código usando testes de unidade e Gravar testes de unidade para C/C++ no
Visual Studio.
O Visual Studio inclui ferramentas de análise de código estático que podem detectar possíveis problemas no
código-fonte. Essas ferramentas incluem uma implementação dos verificadores de regras das Diretrizes Principais
do C++. Para obter mais informações, confiraVisão geral da análise de código do C/C++.
É possível implantar os aplicativos tradicionais de área de trabalho e os aplicativos da UWP para os clientes por
https://docs.microsoft.com/pt-br/visualstudio/debugger/debugging-in-visual-studio
https://docs.microsoft.com/pt-br/visualstudio/test/unit-test-your-code
https://docs.microsoft.com/pt-br/visualstudio/test/writing-unit-tests-for-c-cpp
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md
https://docs.microsoft.com/pt-br/cpp/code-quality/code-analysis-for-c-cpp-overview
Próximas etapas
meio da Microsoft Store. A implantação do CRT é manipulada automaticamente em segundo plano. Para obter
mais informações, confira Publicar aplicativos e jogos do Windows.
Você também pode implantar uma área de trabalho C++ nativa em outro computador. Para obter mais
informações, confira Implantando aplicativos da área de trabalho.
Para obter mais informações sobre como implantar um programa do C++/CLI, confira Guia de Implantação para
Desenvolvedores.
Explore ainda mais o Visual Studio seguindo um dos seguintes artigos introdutórios:
Saiba como usar o editor de códigos
Saiba mais sobre projetos e soluções
https://docs.microsoft.com/pt-br/windows/uwp/publish/
https://docs.microsoft.com/pt-br/cpp/windows/deploying-native-desktop-applications-visual-cpp
https://docs.microsoft.com/pt-br/dotnet/framework/deployment/deployment-guide-for-developers
https://docs.microsoft.com/pt-br/visualstudio/get-started/tutorial-editor
https://docs.microsoft.com/pt-br/visualstudio/get-started/tutorial-projects-solutions
Novidades do C++ no Visual Studio
12/11/2020 • 90 minutes to read • Edit Online
compilador C++
Geração de código, segurança, diagnóstico e controle de versãoGeração de código, segurança, diagnóstico e controle de versão
Melhorias da biblioteca padrão do C++
Melhorias de desempenho/taxa de transferência no compilador e na
biblioteca padrão
 N ovidades de C++ no Visual Studio 2017
O Visual Studio 2019 traz muitas atualizações e correções para o ambiente do Microsoft C++. Corrigimos vários
bugs e problemas no compilador e nas ferramentas. Muitos deles enviados pelos clientes pelas opções Relatar um
Problema e Fornecer uma Sugestão em Enviar Comentár iosEnviar Comentár ios . Obrigado por relatar bugs! Para saber mais sobre
todas as novidades do Visual Studio, visite Novidades no Visual Studio 2019. Para saber mais sobre novidades de
C++ no Visual Studio 2017, confira . Para saber mais sobre as novidades de C++ no Visual Studio 2015 e em
versões anteriores, confira O que há de novo no Visual C++ de 2003 a 2015.
Suporte aprimorado para recursos e correções exatas do C++17, além de suporte experimental para
recursos de C++20, como módulos e corrotinas. Para obter informações detalhadas, consulte
Aprimoramentos de conformidade do C++ no Visual Studio 2019.
A /std:c++latest opção agora inclui os recursos do c++ 20 que não estão necessariamente completos,
incluindo suporte inicial para o operador do c++ 20 <=> ("espaço") para comparação de três vias.
A opção de compilador C++ /Gm foi preterida. Considere desabilitar a opção /Gm em seus scripts de build
se ela estiver definida explicitamente. No entanto, você pode ignorar com segurança o aviso de substituição
para /Gm , pois ela não é tratada como erro ao usar "Tratar avisos como erros" ( /WX ).
Como o MSVC começa a implementação dos recursos do rascunho padrão do C++20 sob o sinalizador 
/std:c++latest , /std:c++latest agora é compatível com /clr (todas as versões), /ZW e /Gm . No Visual
Studio 2019, use os modos /std:c++17 ou /std:c++14 ao compilar com /clr , /ZW ou /Gm (mas
consulte marcador anterior).
Cabeçalhos pré-compilados não são mais gerados por padrão para aplicativos para desktop e de console
do C++.
Análise aprimorada com /Qspectre para fornecer assistência de mitigação para Variante de Espectro 1 (CVE-
2017-5753). Para obter mais informações, consulte Mitigações do Spectre no MSVC.
Implementação de correções exatas e recursos de biblioteca adicionais do C++17 e do C++20. Para obter
informações detalhadas, consulte Aprimoramentos de conformidade do C++ no Visual Studio 2019.
Clang-Format aplicado aos cabeçalhos da biblioteca padrão de C++ para mais facilidade de leitura.
Como o Visual Studio agora dá suporte a Apenas Meu Código para C++, a biblioteca padrão não precisa
mais fornecer maquinário personalizado para que std::function e std::visit cheguem ao mesmo efeito.
A remoção desse mecanismo não tem efeitos visíveis pelo usuário. Uma exceção é que o compilador não
produzirá mais diagnósticos que indiquem problemas na linha 15732480 ou 16707566 do <type_traits>
ou <variant> .
https://github.com/MicrosoftDocs/cpp-docs.pt-br/blob/live/docs/overview/what-s-new-for-visual-cpp-in-visual-studio.md
https://docs.microsoft.com/pt-br/visualstudio/ide/how-to-report-a-problem-with-visual-studio?view=vs-2019&preserve-view=true
https://aka.ms/feedback/suggest?space=62
https://docs.microsoft.com/pt-br/visualstudio/ide/whats-new-visual-studio-2019
https://docs.microsoft.com/pt-br/cpp/porting/visual-cpp-what-s-new-2003-through-2015
https://devblogs.microsoft.com/cppblog/spectre-mitigations-in-msvc/
Melhorias de produtividade de build, incluindo a forma como o vinculador manipula a E/S de Arquivo e o
tempo de vinculação na criação e mesclagem de tipo PDB.
Adicionamos suporte básico para vetorização de SIMD OpenMP. Você pode habilitá-lo usando a nova
opção de compilador /openmp:experimental . Esta opção permite que loops anotados com 
#pragma omp simd sejam potencialmente vetorizados. A vetorização não é garantida. Um aviso será relatado
para loops anotados, mas não vetorizados. Não há suporte para cláusulas SIMD, elas são ignoradas com
um aviso relatado.
Adicionada uma nova opção de linha de comando de inalinhamento /Ob3 , que é uma versão mais
agressiva do /Ob2 . /O2 (otimizar o binário para velocidade) ainda implica /Ob2 por padrão. Se você
achar que o compilador não está embutido agressivamente suficiente, considere a possibilidade de passar 
/O2 -Ob3 .
Adicionamos suporte para funções intrínsecas de SVML (biblioteca matemática de vetores). Essas funções
calculam os equivalentes do vetor de 128 bits, 256 bits ou 512 bits. Nós os adicionamos para dar suporte à
vetorização à mão de loops com chamadas para funções de biblioteca de matemática e outras operações
como divisão de inteiros. Consulte o Guia intrínseco Intel para obter definições das funções compatíveis.
Novas e aprimoradas otimizações:
Avaliação de constantes e simplificações aritméticas para expressões usando intrínsecos de vetor de
SIMD, tanto para formulários float quanto integer.
Uma análise mais eficiente para extrair informações do fluxo de controle (instruções if/else/switch)
para remover branches que comprovadamente sempre resultam em true ou false.
Desenrolamento aprimorado de memset para usar as instruções do vetor SSE2.
Remoção aprimorada de cópias de classe/struct inúteis, especialmente para programas do C++ que
passam por valor.
Aprimorada a otimização de códigos que usam memmove , como as construções std::copy ou 
std::vector e std::string .
Otimizado o design físico de biblioteca padrão para evitar a compilação de partes da biblioteca padrão não
incluídas diretamente. Essa alteração reduz o tempo de compilação de um arquivo vazio que inclui apenas
<vector> na metade. Como consequência, talvez você precise adicionar diretivas #include aos cabeçalhos
que foram incluídos anteriormente de maneira indireta. Por exemplo, o código que usa std::out_of_range
agora pode precisar de #include <stdexcept> . O código que usa um operador de inserção de fluxo agora
pode precisar de #include <ostream> . O benefício é que apenas as unidades de tradução que realmente
usam <stdexcept> ou <ostream> componentes pagam o custo da taxa de transferência para compilá-las.
if constexpr foi aplicado em mais lugares na biblioteca padrão para aumento da taxade transferência e
redução do tamanho do código em operações de cópia, em permutações como reverter e girar, e na
biblioteca de algoritmos paralelos.
A biblioteca padrão agora usa if constexpr internamente para reduzir os tempos de compilação, mesmo
no modo C++14.
A detecção de vinculação dinâmica do runtime para a biblioteca de algoritmos paralelos não usa mais uma
página inteira para armazenar a matriz do ponteiro de função. Marcar essa memória como somente leitura
deixou de ser considerado relevante para fins de segurança.
O construtor de std::thread não aguarda mais que o thread seja iniciado, e não insere mais tantas
camadas de chamadas de função entre a biblioteca C subjacente _beginthreadex e o objeto fornecido que
pode ser chamado. Anteriormente std::thread , colocamos seis funções entre _beginthreadex o e o objeto
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#!=undefined&techs=SVML
C++ IDE
Suporte de Live Share para C++Suporte de Live Share para C++
IntelliCode paraC++IntelliCode paraC++
Vi su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1V i su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1
IntelliSense de modeloIntelliSense de modelo
Nova experiência de janela iniciarNova experiência de janela iniciar
chamável fornecido. Esse número foi reduzido para apenas três, dois dos quais são apenas std::invoke .
Essa alteração também resolve um bug de tempo obscuro, onde um std::thread Construtor deixaria de
responder se o relógio do sistema fosse alterado no momento exato em std::thread que estava sendo
criado.
Correção de uma regressão de desempenho em std::hash que introduzimos ao implementar 
std::hash<std::filesystem::path> .
A biblioteca padrão usa destruidores em vez de blocos catch em diversos lugares para chegar à exatidão.
Essa alteração resulta em melhor interação do depurador: exceções que você joga pela biblioteca padrão
nos locais afetados agora aparecem como sendo geradas de seu site de lançamento original, em vez de
nossa Rethrow. Nem todos os blocos de captura de biblioteca padrão foram eliminados. Esperamos que o
número de blocos catch seja reduzido em versões posteriores do MSVC.
O gerador de código abaixo do ideal em std::bitset causado por um lançamento condicional em uma
função noexcept foi corrigido pela fatoração do caminho de lançamento.
A família std::list e std::unordered_* usa iteradores de não depuração internamente em mais locais.
Vários membros std::list foram alterados para reutilizar os nós da lista onde possível, em vez de
desalocá-los e realocá-los. Por exemplo, considerando list<int> que já tenha um tamanho de 3, uma
chamada para assign(4, 1729) agora substitui o ints nos três primeiros nós da lista e aloca um novo nó de
lista com o valor 1729.
Todas as chamadas da biblioteca padrão para erase(begin(), end()) foram alteradas para clear() .
Agora, std::vector inicializa e apaga os elementos com mais eficiência em determinados casos.
Melhorias em std::variant para torná-lo mais adequado para otimizadores, resultando na geração de
códigos melhores. O inlining de código agora está agora muito melhor com std::visit .
Agora, o Live Share dá suporte a C++, permitindo que desenvolvedores usem o Visual Studio ou o Visual Studio
Code para colaborar em tempo real. Para obter mais informações, consulte anunciando o Live share para C++:
Real-Time compartilhamento e colaboração
O IntelliCode usa seu próprio treinamento extensivo e seu contexto de código para colocar o que você mais
provavelmente usará na parte superior da sua lista de conclusão. Frequentemente, ele é capaz de eliminar a
necessidade de rolar para baixo na lista. Para C++, o IntelliCode oferece a maior ajuda quando você está usando
bibliotecas populares como a biblioteca padrão. IntelliCode é uma extensão opcional disponível como um
componente de carga de trabalho no instalador. Para obter mais informações, consulte Sugestões de
preenchimento de código auxiliadas por IA para C++ usando IntelliCode.
A Barra de ModeloBarra de Modelo agora utiliza a interface do usuário de Janela de InspeçãoJanela de Inspeção em vez de uma janela modal, dá
suporte a modelos aninhados e pré-popula eventuais argumentos padrão na Janela de InspeçãoJanela de Inspeção. Para obter
mais informações, veja Melhorias de IntelliSense de modelo para Visual Studio 2019 versão prévia 2. Uma lista
suspensa Usados recentementeUsados recentemente na Barra de ModeloBarra de Modelo permite alternar rapidamente entre conjuntos anteriores
de argumentos de exemplo.
Ao iniciar o IDE, uma nova janela inicial é exibida. Ele tem opções para abrir projetos recentes, clonar código do
https://docs.microsoft.com/pt-br/visualstudio/liveshare/
https://devblogs.microsoft.com/cppblog/cppliveshare/
https://devblogs.microsoft.com/cppblog/cppintellicode/
https://devblogs.microsoft.com/cppblog/template-intellisense-improvements-for-visual-studio-2019-preview-2/
Novos nomes para alguns modelos de projetoNovos nomes para alguns modelos de projeto
Diversos aprimoramentos de produtividadeDiversos aprimoramentos de produtividade
Melhorias de Informações RápidasMelhorias de Informações Rápidas
Vi su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1V i su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1
IntelliCode disponível na carga de trabalho do C++IntelliCode disponível na carga de trabalho do C++
Vi su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1V i su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1
Suporte para CMake
controle do código-fonte, abrir código local como uma solução ou uma pasta ou criar um novo projeto. A caixa de
diálogo Novo Projeto também foi aprimorada para uma experiência de pesquisa que pode ser filtrada.
Modificamos vários nomes e descrições de modelo de projeto de acordo com a caixa de diálogo Novo Projeto
atualizada.
O Visual Studio 2019 inclui os seguintes recursos que o ajudarão a tornar a codificação mais fácil e intuitiva:
Correções rápidas para:
Informações rápidas para um bloco passando o mouse sobre a chave de fechamento
Espiar Cabeçalho / Arquivo de Código
Ir para Definição em #include abre o arquivo
Adicionar #include ausentes
NULL para nullptr
Adicionar ponto e vírgula ausente
Resolver namespace ou escopo ausente
Substituir operandos de indireção inválidos (* para & e & para *)
Para obter mais informações, veja Aprimoramentos de produtividade do C++ no Visual Studio 2019 Versão Prévia
2.
A dica de ferramenta Informações Rápidas agora respeita a colorização semântica do seu editor. Ela também
apresenta um novo link para Pesquisa OnlinePesquisa Online , que pesquisará documentos online que traga mais informações
sobre o constructo de código focalizado. O link fornecido pelas informações rápidas para código vermelho-
ondulado procurará o erro online. Dessa forma, você não precisa digitar a mensagem novamente no navegador.
Para obter mais informações, consulte melhorias de informações rápidas no Visual Studio 2019: colorização e
pesquisa online.
O IntelliCode agora é fornecido como um componente opcional na carga de trabalho Desenvolvimento paraDesenvolvimento para
desktop com C++desktop com C++. Para saber mais, confira IntelliCode aprimorado para C++ agora vem com o Visual Studio
2019.
Suporte para CMake 3.14
O Visual Studio agora pode abrir caches do CMake existentes gerados por ferramentas externas, como o
CMakeGUI, ou por sistemas de metabuild personalizados ou scripts de build que invocam cmake.exe eles
mesmos.
Desempenho aprimorado de IntelliSense.
Um novo editor de configurações fornece uma alternativa para editar o arquivo CMakeSettings.json
manualmente e oferece alguma paridade com CMakeGUI.
O Visual Studio ajuda a impulsionar o desenvolvimento de C++ com o CMake no Linux, detectando se você
tem uma versão compatível do CMake em seu computador Linux. Caso contrário, ele oferece instalá-lo
para você.
As incompatibilidades de configuração no CMakeSettings, como arquiteturas incompatíveis ou
https://devblogs.microsoft.com/cppblog/c-productivity-improvements-in-visual-studio-2019-preview-2/https://devblogs.microsoft.com/cppblog/quick-info-improvements-in-visual-studio-2019-colorization-and-search-online/
https://devblogs.microsoft.com/cppblog/improved-c-intellicode-now-ships-with-visual-studio-2019/
Vi su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1V i su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1
Linux e o Subsistema do Windows para Linux
Vi su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1V i su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1
Integração de IncrediBuild
Depuração
Desenvolvimento da Área de Trabalho do Windows com C++
configurações incompatíveis do gerador de CMake, mostram linhas irregulares no editor JSON e erros na
Lista de Erros.
A cadeia de ferramentas do vcpkg é detectada automaticamente e habilitada para projetos do CMake que
são abertos no IDE após vcpkg integrate install ser executado. Esse comportamento pode ser desativado
especificando-se um arquivo de cadeia de ferramentas vazio no CMakeSettings.
Projetos do CMake agora permitem depuração Apenas Meu Código por padrão.
Os avisos de análise estática agora são processados em segundo plano e exibidos no editor para projetos
CMake.
Mensagens 'begin' e 'end' mais claras de build e de configuração para projetos do CMake e suporte à
interface do usuário de progresso do build do Visual Studio. Além disso, agora há uma configuração de
detalhes de CMake em Ferramentas > OpçõesFerramentas > Opções para personalizar o nível de detalhe das mensagens de
build e configuração do CMake na Janela de Saída.
A configuração cmakeToolchain agora é compatível com o CMakeSettings.json para especificar cadeias de
ferramentas sem modificar manualmente a linha de comando do CMake.
Um novo atalho de menu Compilar Tudo****Ctr l + Shift + BCompilar Tudo****Ctr l + Shift + B.
Suporte integrado para edição, compilação e depuração de projetos CMake com Clang/LLVM. Para saber mais,
veja Suporte a Clang/LLVM no Visual Studio.
Suporte para AddressSanitizer (ASan) em projetos de plataforma cruzada do Linux e CMake. Para saber
mais, confira AddressSanitizer (ASan) para carga de trabalho do Linux no Visual Studio 2019.
Suporte integrado do Visual Studio para uso de C++ com o subsistema Windows para Linux (WSL). Para
saber mais, confira C++ com Visual Studio 2019 e subsistema Windows para Linux (WSL).
O IncrediBuild foi incluído como um componente opcional na carga de trabalho Desenvolvimento paraDesenvolvimento para
desktop com C++desktop com C++. O Monitor de Compilação do IncrediBuild foi totalmente integrado no IDE do Visual Studio.
Para obter mais informações, consulte Visualizar sua compilação com o monitor de compilação do IncrediBuild e o
Visual Studio 2019.
Para aplicativos C++ em execução no Windows, os arquivos PDBs agora são carregados em um processo
separado de 64 bits. Essa alteração resolve uma variedade de falhas causadas pelo depurador com
memória insuficiente. Por exemplo, ao depurar aplicativos que contêm um grande número de módulos e
arquivos PDB.
A pesquisa está habilitada nas janelas InspeçãoInspeção , AutosAutos e LocaisLocais .
Estes assistentes do C++ ATL/MFC não estão mais disponíveis:
Assistente de componente de COM+ 1.0 da ATL
Assistente do componente Active Server Page da ATL
Assistente de provedor OLE DB da ATL
https://devblogs.microsoft.com/cppblog/clang-llvm-support-in-visual-studio/
https://github.com/google/sanitizers/wiki/AddressSanitizer
https://devblogs.microsoft.com/cppblog/addresssanitizer-asan-for-the-linux-workload-in-visual-studio-2019/
https://devblogs.microsoft.com/cppblog/c-with-visual-studio-2019-and-windows-subsystem-for-linux-wsl/
https://devblogs.microsoft.com/cppblog/visualize-your-build-with-incredibuilds-build-monitor-and-visual-studio-2019/
Desenvolvimento móvel com C++ (Android e iOS)
Conjunto de ferramentas de plataforma Clang/C2
Análise de código
Vi su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1V i su a l St u d i o 2 0 1 9 v e r sã o 1 6 .1
Teste de unidade
Assistente de página de propriedades da ATL
Assistente de consumidor OLE DB da ATL
Consumidor ODBC do MFC
Classe MFC em Controle ActiveX
Classe MFC em TypeLib.
O código de exemplo para essas tecnologias está arquivado em Microsoft Docs e no repositório GitHub
VCSamples.
O SDK (Software Development Kit) do Windows 8.1 não está mais disponível no instalador do Visual
Studio. Recomendamos atualizar seus projetos em C++ para o SDK do Windows 10 mais recente. Se você
tiver uma dependência forte no 8.1, poderá baixá-la do arquivo do SDK do Windows.
O direcionamento do Windows XP não estará mais disponível para o conjunto de ferramentas do C++
mais recente. O direcionamento do XP com bibliotecas e o compilador MSVC no nível do VS 2017 ainda é
compatível e pode ser instalado por meio de "Componentes individuais".
Nossa documentação desencoraja ativamente o uso de módulos de mesclagem para a implantação do
Runtime do Visual C++. Estamos realizando, nesta versão, a etapa extra de marcar nossos MSMs como
preteridos. Considere migrar sua implantação central do VCRuntime de MSMs para o pacote redistribuível.
A experiência do Android C++ agora usa por padrão o SDK do Android 25 e o NDK do Android 16b.
O componente experimental Clang/C2 foi removido. Use o conjunto de ferramentas do MSVC para conformidade
total de padrões C++ com /permissive- e /std:c++17 ou a cadeia de ferramentas Clang/LLVM para Windows.
A análise de código agora é executada automaticamente em segundo plano. Avisos são exibidos como
linhas irregulares verdes no editor conforme você digita. Para obter mais informações, consulte Análise de
código no editor no Visual Studio 2019 Versão Prévia 2.
Novas regras experimentais de ConcurrencyCheck para tipos de biblioteca padrão conhecidos do <mutex>
cabeçalho. Para obter mais informações, consulte Análise de código de simultaneidade no Visual Studio
2019.
Uma implementação parcial atualizada do Verificador de perfil de tempo de vida, que detecta referências e
ponteiros pendentes. Para obter mais informações, consulte Atualização de perfil de tempo de vida no
Visual Studio 2019 Versão Prévia 2.
Mais verificações relacionadas à corrotina, incluindo C26138, C26810, C26811 e a regra experimental
C26800. Para obter mais informações, consulte Novas verificações de análise de código no Visual Studio
2019: uso após movimentação e corrotina.
Novas correções rápidas para verificações de variável não inicializadas. Para saber mais, confira Novas
correções rápidas de análise de código para memória não inicializada (C6001) e avisos de uso antes da
inicialização (C26494).
O modelo de projeto de teste do C++ gerenciado não está mais disponível. Você pode continuar usando a
https://devblogs.microsoft.com/cppblog/in-editor-code-analysis-in-visual-studio-2019-preview-2/
https://devblogs.microsoft.com/cppblog/concurrency-code-analysis-in-visual-studio-2019/
https://herbsutter.com/2018/09/20/lifetime-profile-v1-0-posted/
https://devblogs.microsoft.com/cppblog/lifetime-profile-update-in-visual-studio-2019-preview-2/
https://devblogs.microsoft.com/cppblog/new-code-analysis-checks-in-visual-studio-2019-use-after-move-and-coroutine/
https://devblogs.microsoft.com/cppblog/new-code-analysis-quick-fixes-for-uninitialized-memory-c6001-and-use-before-init-c26494-warnings/
Compilador do Visual Studio 2017 C++
Aprimoramentos de conformidade do C++Aprimoramentos de conformidade do C++
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .7Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .7
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .8Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .8
Novas opções do compiladorNovas opções do compilador
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3
estrutura de teste do C++ gerenciado em seus projetos existentes. Para novos testes de unidade, considere usar
uma das estruturas de testenativas para as quais o Visual Studio fornece modelos (MSTest, Google Test) ou o
modelo de projeto de teste de C# gerenciado.
 N ovidades de C++ no Visual Studio
O Visual Studio 2017 traz muitas atualizações e correções para o ambiente do C++. Corrigimos mais de 250 bugs
e relataram problemas no compilador e nas ferramentas. Muitos foram enviados por clientes por meio do
relatório de um problema e fornecem uma sugestão de opções em enviar comentár iosenviar comentár ios . Obrigado por relatar
bugs! Para saber mais sobre todas as novidades do Visual Studio, visite Novidades no Visual Studio 2017. Para
saber mais sobre novidades de C++ no Visual Studio 2019, confira . Para saber mais sobre as novidades de C++
no Visual Studio 2015 e em versões anteriores, confira O que há de novo no Visual C++ de 2003 a 2015.
Atualizamos o compilador C++ e a biblioteca padrão nesta versão com suporte aprimorado para os recursos C++
11 e C++ 14. Ele também inclui suporte preliminar para determinados recursos que devem estar no padrão C++
17. Para obter informações detalhadas, consulte Aprimoramentos de conformidade do C++ no Visual Studio
2017.
O compilador dá suporte a cerca de 75% dos recursos que são novos no C++ 17, incluindo associações
estruturadas, constexpr lambdas, if constexpr variáveis embutidas, expressões de dobra e adição noexcept ao
sistema de tipos. Esses recursos estão disponíveis na /std:c++17 opção. Para obter mais informações, consulte
melhorias de conformidade do C++ no Visual Studio 2017
Agora, o conjunto de ferramentas do compilador do MSVC no Visual Studio versão 15.7 é compatível com o
padrão do C++. Para obter mais informações, consulte anunciando: MSVC está em conformidade com a
compatibilidade de linguagem C++ Standard e Microsoft C++.
A /experimental:preprocessor opção de compilador habilita o novo pré-processador de MSVC experimental que,
eventualmente, estará em conformidade com todos os padrões de C e C++ aplicáveis. Para obter mais
informações, consulte visão geral do MSVC New pré-processador.
/permissive- : Habilite todas as opções de compilador de conformidade de padrões estritos e desabilite a
maioria das extensões de compilador específicas da Microsoft (mas não __declspec(dllimport) , por
exemplo). Essa opção está ativada por padrão no Visual Studio 2017 versão 15.5. O /permissive- modo de
conformidade inclui suporte para pesquisa de nome de duas fases. Para obter mais informações, consulte
melhorias de conformidade do C++ no Visual Studio.
/diagnostics : Habilita a exibição do erro de diagnóstico ou local de aviso de três maneiras diferentes:
apenas o número de linha, o número de linha e a coluna, ou o número de linha e coluna, com um cursor
sob a linha de código incorreto.
/debug:fastlink : Habilite até 30% mais rápido de tempo de link incremental (vs. Visual Studio 2015), não
copiando todas as informações de depuração no arquivo PDB. Em vez disso, o arquivo PDB aponta para as
informações de depuração para os arquivos de biblioteca e de objeto usados para criar o executável.
Consulte ciclo de compilação C++ mais rápido em vs "15 /Debug:fastlink " com e recomendações para
acelerar as compilações do C++ no Visual Studio.
O Visual Studio 2017 permite usar /sdl com /await . Removemos a /RTC limitação com corrotinas.
/std:c++14 e /std:c++latest : essas opções de compilador permitem que você aceite versões específicas
da linguagem de programação ISO C++ em um projeto. A maioria dos novos recursos padrão de rascunho
https://docs.microsoft.com/pt-br/visualstudio/ide/how-to-report-a-problem-with-visual-studio?view=vs-2017&preserve-view=true
https://docs.microsoft.com/pt-br/visualstudio/ide/whats-new-visual-studio-2017?view=vs-2017&preserve-view=true
https://docs.microsoft.com/pt-br/cpp/porting/visual-cpp-what-s-new-2003-through-2015
https://devblogs.microsoft.com/cppblog/announcing-msvc-conforms-to-the-c-standard/
https://docs.microsoft.com/pt-br/cpp/build/reference/experimental-preprocessor
https://docs.microsoft.com/pt-br/cpp/preprocessor/preprocessor-experimental-overview
https://docs.microsoft.com/pt-br/cpp/build/reference/permissive-standards-conformance
https://docs.microsoft.com/pt-br/cpp/build/reference/diagnostics-compiler-diagnostic-options
https://docs.microsoft.com/pt-br/cpp/build/reference/debug-generate-debug-info
https://devblogs.microsoft.com/cppblog/faster-c-build-cycle-in-vs-15-with-debugfastlink/
https://devblogs.microsoft.com/cppblog/recommendations-to-speed-c-builds-in-visual-studio/
https://docs.microsoft.com/pt-br/cpp/build/reference/sdl-enable-additional-security-checks
https://docs.microsoft.com/pt-br/cpp/build/reference/await-enable-coroutine-support
https://docs.microsoft.com/pt-br/cpp/build/reference/rtc-run-time-error-checks
https://docs.microsoft.com/pt-br/cpp/build/reference/std-specify-language-standard-version
Geração de código, segurança, diagnóstico e controle de versãoGeração de código, segurança, diagnóstico e controle de versão
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .7Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .7
é protegida pela /std:c++latest opção.
/std:c++17 habilita o conjunto de recursos C++ 17 implementados pelo compilador. Esta opção desabilita
o suporte do compilador e da biblioteca padrão para recursos após C++ 17: aqueles que são alterados ou
novos em versões posteriores do rascunho de trabalho e atualizações de defeito do padrão C++. Para
habilitar esses recursos, use /std:c++latest .
Esta versão apresenta várias melhorias na otimização, na geração de código, no controle de versão do conjunto de
ferramentas e nos diagnósticos. Alguns aprimoramentos importantes incluem:
Melhor geração de código de loops: suporte para vetorização automática da divisão de inteiros constantes,
melhor identificação de padrões de memset.
Segurança de código aprimorada: emissão aprimorada de diagnóstico de compilador de saturação de buffer e 
/guard:cf agora protege instruções de switch que geram tabelas de salto.
Controle de versão: o valor da macro de pré-processador interna _ MSC _ Ver_ MSC _ Ver agora está sendo atualizado de
forma monotônico em cada atualização de conjunto de ferramentas Visual C++. Para obter mais informações,
consulte Versão do compilador do Visual C++.
Novo layout do conjunto de ferramentas: o compilador e as ferramentas de build relacionadas têm um novo
local e nova estrutura de diretório em seu computador de desenvolvimento. O novo layout habilita instalações
lado a lado de várias versões do compilador. Para saber mais, confira Layout de ferramentas do compilador no
Visual Studio 2017.
Diagnósticos aprimorados: a janela de saída agora mostra a coluna em que ocorre um erro. Para obter mais
informações, consulte melhorias do diagnóstico do compilador do C++ em vs "15" Preview 5.
Ao usar corrotinas, a palavra-chave experimental yieldyield (disponível na /await opção) foi removida. Em vez
disso, seu código deve ser atualizado para usar co_yield . Para obter mais informações, consulte yield
palavra-chave para se tornar co_yield em vs 2017.
Aprimoramentos adicionais para o diagnóstico no compilador. Para saber mais, confira Aperfeiçoamentos de
diagnóstico no Visual Studio 2017 15.3.0.
Visual C++ o desempenho do tempo de execução continua a melhorar por meio da melhor qualidade de código
gerada. Agora você pode simplesmente recompilar o código e o aplicativo será executado mais rapidamente.
Algumas das otimizações do compilador são totalmente novas, como a vetorização de repositórios escalares
condicionais, a combinação de chamadas sin(x) e cos(x) em um novo sincos(x) e a eliminação de instruções
redundantes do otimizador de SSA. Outras otimizações de compilador são melhorias na funcionalidade existente,
como a heurística vetorizadorautomático para expressões condicionais, otimizações de loop melhores e CodeGen
flutuante mín/máx. O vinculador tem uma implementação nova e mais rápida /OPT:ICF , que pode resultar em
até 9% de aumentos de tempo de vinculação, e há outras correções de desempenho na vinculação incremental.
Para obter mais informações, consulte /OPT (Otimizações) e /INCREMENTAL (Vincular de maneira incremental).
O compilador do Microsoft C++ dá suporte ao AVX-512 da Intel. Ele tem instruções de comprimento de vetor que
trazem novas funções em AVX-512 a registros de largura de 128 bits e 256 bits.
A opção /Zc: noexceptTypes- pode ser usada para reverter para a versão c++ 14 do noexcept ao usar o modo
c++ 17 em geral. Essa opção permite que você atualize seu código-fonte para estar em conformidade com a
C++17 sem precisar reescrever todo o código throw() ao mesmo tempo. Para obter mais informações, consulte
Remoção de especificação de exceção dinâmica e noexcept.
Novo compilador switch /Qspectre para ajudar a mitigar contra ataques de canal lateral de execução
especulativa. Para obter mais informações, consulte mitigações Spectre em MSVC.
Novo aviso de diagnóstico da mitigação do Spectre. Para saber mais, confira Diagnóstico do Spectre no Visual
https://docs.microsoft.com/pt-br/cpp/build/reference/std-specify-language-standard-version
https://docs.microsoft.com/pt-br/cpp/build/reference/guard-enable-control-flow-guard
https://devblogs.microsoft.com/cppblog/visual-c-compiler-version/
https://devblogs.microsoft.com/cppblog/compiler-tools-layout-in-visual-studio-15/
https://devblogs.microsoft.com/cppblog/c-compiler-diagnostics-improvements-in-vs-15-rc/
https://devblogs.microsoft.com/cppblog/yield-keyword-to-become-co_yield-in-vs-2017/
https://devblogs.microsoft.com/cppblog/diagnostic-improvements-in-vs2017-15-3-0/
https://docs.microsoft.com/pt-br/cpp/build/reference/opt-optimizations
https://docs.microsoft.com/pt-br/cpp/build/reference/incremental-link-incrementally
https://docs.microsoft.com/pt-br/cpp/build/reference/zc-noexcepttypes
https://docs.microsoft.com/pt-br/cpp/build/reference/qspectre
https://devblogs.microsoft.com/cppblog/spectre-mitigations-in-msvc/
https://devblogs.microsoft.com/cppblog/spectre-diagnostic-in-visual-studio-2017-version-15-7-preview-4/
Biblioteca padrão C++
Melhorias de correçãoMelhorias de correção
Vi su a l St u d i o 2 0 1 7 R T M (v e r sã o 1 5 .0 )V i su a l St u d i o 2 0 1 7 R T M (v e r sã o 1 5 .0 )
V i su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3
Studio 2017 versão 15.7 versão prévia 4.
Um novo valor para/ZC, /Zc:__cplusplus , permite a emissão de relatórios corretos do suporte standard do
C++. Por exemplo, quando a opção é definida e o compilador está no /std:c++17 modo, o valor expande para 
201703L . Para saber mais, confira Agora o MSVC relata corretamente __cplusplus.
Melhorias de diagnóstico secundárias basic_string _ITERATOR_DEBUG_LEVEL != 0 . Quando uma verificação de
IDL é ultrapassada em uma máquina de cadeia de caracteres, ela agora relatará o comportamento específico
que causou a viagem. Por exemplo, em vez de "não é possível desreferenciar o iterador de cadeia de
caracteres", você verá "não é possível desreferenciar o iterador de cadeia de caracteres porque ele está fora do
intervalo (por exemplo, um iterador de fim)".
O operador de atribuição de mudança std::promise foi corrigido, pois anteriormente poderia causar bloqueio
indefinido no código.
Erros de compilador corrigidos, com a conversão implícita de atomic<T*> em T* .
pointer_traits<Ptr> agora detecta Ptr::rebind<U> corretamente.
Foi corrigido um const qualificador ausente no move_iterator operador de subtração.
Corrigido o gerador de código inválido silencioso para alocadores definidos pelo usuário com estado
solicitando propagate_on_container_copy_assignment e propagate_on_container_move_assignment .
atomic<T> agora tolera o operator&() sobrecarregado.
Pequena melhoria no diagnóstico do compilador para chamadas bind() incorretas.
Há mais melhorias na biblioteca Standard no Visual Studio 2017 RTM. Para obter uma lista completa, consulte a
entrada de blog da equipe do C++ correções de biblioteca padrão no VS 2017 RTM.
Os contêineres da biblioteca padrão agora fixam o max_size() ao numeric_limits<difference_type>::max() em
vez do max() de size_type . Essa alteração garante que o resultado de distance() nos iteradores do
contêiner seja representável no tipo de retorno de distance() .
Especialização auto_ptr<void> ausente corrigida.
Os for_each_n() generate_n() algoritmos,, e search_n() anteriormente não puderam ser compilados se o
argumento de comprimento não era um tipo integral. Agora, eles tentam converter comprimentos não-
integral para os iteradores difference_type .
normal_distribution<float> não emite mais avisos na biblioteca padrão sobre o estreitamento de double para
float.
Corrigidas algumas operações basic_string que usavam npos em vez de max_size() durante a verificação
de estouro de tamanho máximo.
condition_variable::wait_for(lock, relative_time, predicate) aguardaria o tempo relativo inteiro se houvesse
uma ativação falsa. Agora ele aguarda apenas um único intervalo do tempo relativo.
future::get() agora invalida o future , como o padrão exige.
iterator_traits<void *> era um erro de hardware porque tentava formar void& ; agora claramente torna-se
um struct vazio para permitir o uso de iterator_traits em condições SFINAE "is iterator".
Alguns avisos relatados por Clang -wsystem-Headers-wsystem-Headers foram corrigidos.
Também corrigido "a especificação de exceção na declaração não corresponde à declaração anterior" relatada
por Clang -Wmicrosoft-Exception-spec-Wmicrosoft-Exception-spec.
Também corrigidos os avisos de ordenação mem-initializer-list relatados por Clang e C1XX.
Os contêineres não ordenados não trocavam funções de hash ou predicados quando os próprios contêineres
eram trocados. Agora eles fazem isso.
https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
https://devblogs.microsoft.com/cppblog/stl-fixes-in-vs-2017-rtm/
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
Aprimoramentos de conformidadeAprimoramentos de conformidade
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3
Muitas operações de permuta de contêiner agora estão marcadas noexcept ( já que nossa biblioteca padrão
nunca pretende lançar uma exceção ao detectar a condição de propagate_on_container_swap comportamento
indefinido não-igual ao alocador não-EQUAL).
Muitas vector<bool> operações agora estão marcadas noexcept .
A biblioteca padrão agora imporá o alocador de correspondência value_type (no modo C++17) com uma
hachura de escape de recusa.
Corrigidas algumas condições em que self-range-insert em basic_string misturaria o conteúdo das cadeias
de caracteres. (Observação: self-range-insert em vectors ainda é proibido pelo Standard.)
basic_string::shrink_to_fit() não é mais afetado pelo propagate_on_container_swap do alocador.
std::decay Agora lida com tipos de função Abominable, ou seja, tipos de função que são qualificados por CV,
são qualificadas para referência ou ambos.
Alteradas as diretivas de inclusão para usar diferenciação adequada de maiúsculas e minúsculas e barras
invertidas, melhorando a portabilidade.
Corrigido o aviso C4061 "enumerador ' enumerador ' na opção de enumeração ' enumeração ' não é
manipulado explicitamente por um rótulo case". Esse aviso é desativado por padrão e foi corrigido como uma
exceção à política geral da biblioteca padrão para avisos. (A biblioteca padrão está /W4 limpa, mas não tenta
ser /Wall limpa. Muitos avisos desativados por padrão são com ruído incomum e não se destinam a serem
usados regularmente.)
Melhoria nas verificações de depuração de std::list . Os iteradoresde lista agora verificam operator->() e 
list::unique() agora marca os iteradores como invalidados.
Corrigida a metaprogramação de uses-allocator em tuple .
std::partition Agora chama os tempos de predicado N em vez de N + 1 vezes, conforme o padrão exige.
As tentativas de evitar estáticas mágicas na versão 15.3 foram reparadas na versão 15.5.
std::atomic<T> não requer mais que T seja construível por padrão.
Algoritmos de heap que levam tempo logarítmica se comportam de forma diferente quando a depuração do
iterador está habilitada Eles não fazem mais uma asserção de tempo linear de que a entrada é, na verdade, um
heap.
__declspec(allocator) agora é protegido apenas para C1XX a fim de evitar avisos do Clang que não entendem
esse declspec.
basic_string::npos agora está disponível como uma constante de tempo de compilação.
std::allocator no modo C++ 17 agora lida corretamente com a alocação de tipos alinhados por excesso, ou
seja, tipos cujo alinhamento é maior que max_align_t , a menos que seja desabilitado pelo /Zc:alignedNew- .
Por exemplo, vetores de objetos com alinhamento de 16 ou de 32 bytes agora serão corretamente alinhados
para instruções SSE e AVX.
Adicionamos <any> , <string_view> , apply() , make_from_tuple() .
Adicionado <optional> , <variant> , e shared_ptr::weak_type <cstdalign> .
Habilitado C++ 14 constexpr em min(initializer_list) , max(initializer_list) , e, 
minmax(initializer_list) e min_element() , e max_element() minmax_element() .
Para obter mais informações, consulte tabela de conformidade da linguagem Microsoft C++.
Vários recursos adicionais do C++17 foram implementados. Para obter mais informações, consulte tabela de
conformidade da linguagem Microsoft C++.
Implementado P0602R0 "variante e opcional devem propagar a trivialidade copiar/mover".
A biblioteca padrão agora oficialmente tolera RTTI dinâmico sendo desabilitado por meio da opção /GR-. 
dynamic_pointer_cast() E rethrow_if_nested() dynamic_cast , de forma inerente, exigem, portanto, a
https://docs.microsoft.com/pt-br/cpp/build/reference/gr-enable-run-time-type-information
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
biblioteca padrão agora as marca como =delete sob /GR- .
Mesmo quando o RTTI dinâmico foi desabilitado via /GR- , "RTTI estático" na forma de typeid(SomeType) ainda
está disponível e alimenta vários componentes de biblioteca padrão. A biblioteca padrão agora também dá
suporte à desabilitação desse recurso, por meio do /D_HAS_STATIC_RTTI=0 . Esse sinalizador também
desabilitará std::any , as funções membro target() e target_type() de std::function e a função membro
amigável get_deleter() de std::shared_ptr e de std::weak_ptr .
A biblioteca padrão agora usa C++ 14 constexpr incondicionalmente, em vez de macros definidas
condicionalmente.
A biblioteca padrão agora usa modelos de alias internamente.
A biblioteca padrão agora usa nullptr internamente, em vez de nullptr_t{} . (O uso interno de NULL foi
erradicado. O uso interno de 0-as-null está sendo eliminado gradualmente.)
A biblioteca padrão agora usa std::move() internamente, em vez de usar std::forward() de maneira
estilística indevidamente.
static_assert(false, "message") foi alterado por #error message . Essa alteração melhora o diagnóstico do
compilador porque #error interrompe imediatamente a compilação.
A biblioteca padrão não marca mais funções como __declspec(dllimport) . A tecnologia moderna de
vinculador não exige mais isso.
SFINAE extraído para argumentos de modelo padrão, o que reduzia a desordem em comparação com tipos de
retorno e tipos de argumento de função.
As verificações de depuração no <random> agora usam a maquina comum da biblioteca padrão, em vez da
função interna _Rng_abort() , que é chamada fputs() de stderrstderr . A implementação dessa função foi mantida
para compatibilidade binária. Vamos removê-lo na próxima versão incompatível binária da biblioteca padrão.
Vários recursos de biblioteca padrão foram adicionados, substituídos ou removidos de acordo com o padrão
C++ 17. Para obter mais informações, consulte melhorias de conformidade do C++ no Visual Studio.
Suporte experimental para os seguintes algoritmos paralelos:
As assinaturas para os seguintes algoritmos paralelos são adicionadas, mas não são paralelizadas no
momento. A criação de perfil mostrou nenhum benefício em paralelizar algoritmos que só movem ou
permutam elementos:
all_of
any_of
for_each
for_each_n
none_of
reduce
replace
replace_if
sort
copy
copy_n
fill
fill_n
move
reverse
reverse_copy
rotate
rotate_copy
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .6Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .6
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .7Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .7
Correções de desempenho e taxa de transferênciaCorreções de desempenho e taxa de transferência
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3
swap_ranges
<memory_resource>
Princípios básicos da biblioteca V1
Exclusão da atribuição polymorphic_allocator
Melhorias na dedução de argumento de modelo de classe
Suporte a algoritmos paralelos não é mais experimental
Uma nova implementação de <filesystem>
Conversões elementares de cadeia de caracteres (parcial)
std::launder()
std::byte
hypot(x,y,z)
Evitar decaimento desnecessário
Funções matemáticas especiais
constexpr char_traits
Guias de dedução da biblioteca padrão
Para obter mais informações, consulte tabela de conformidade da linguagem Microsoft C++.
Fez sobrecargas basic_string::find(char) chamar traits::find apenas uma vez. Anteriormente, isso era
implementado como uma pesquisa de cadeia de caracteres geral para de uma cadeia de caracteres de
comprimento 1.
basic_string::operator== agora verifica o tamanho da cadeia de caracteres antes de comparar o conteúdo das
cadeias de caracteres.
Removido o acoplamento de controle em basic_string , que dificultava a análise do otimizador do compilador.
Para todas as cadeias de caracteres curtas, chamar reserve ainda não tem certo custo por não fazer nada.
std::vector foi revisado quanto à exatidão e ao desempenho: a alias durante as operações de inserção e
emplace agora é manipulado corretamente conforme exigido pelo padrão, a garantia de exceção forte agora é
fornecida quando exigido pelo padrão por meio de move_if_noexcept() e outra lógica, e INSERT e emplace
fazem menos operações de elementos.
A biblioteca padrão do C++ agora evita desreferenciar ponteiros nulos sofisticados.
Desempenho de weak_ptr::lock() aprimorado.
Para aumentar a taxa de transferência do compilador, os cabeçalhos da biblioteca padrão do C++ agora evitam
incluir declarações para intrínsecos do compilador que são desnecessários.
Aumento mais de três vezes do desempenho dos construtores de movimento std::string e std::wstring .
Contratamos de interações com noexcept o, que impedia o inalinhamento da std::atomic implementação em
funções que usam SEH (manipulação de exceção estruturada).
Alterada a função interna _Deallocate() da biblioteca padrão para ser otimizada em código menor, permitindo
que ele seja embutido em outros locais.
Alterado std::try_lock() para usar a expansão de pacote em vez de recursão.
O algoritmo de impedimento de deadlock std::lock() foi melhorado para usar operações lock() em vez de
girar em try_lock() em todos os bloqueios.
Habilitada a otimização de valor retornado nomeado em system_category::message() .
conjunction e disjunction agora instanciam N + 1 tipos, em vez de 2N + 2 tipos.
std::function não instancia mais máquinas de suporte de alocador para cada chamável apagado por tipo,
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
melhorando a taxa de transferência e reduzindo o tamanho de .obj em programas que passam vários lambdas
distintospara std::function .
allocator_traits<std::allocator> contém operações std::allocator manualmente embutidas, o que reduz o
tamanho do código que interage com std::allocator apenas por meio de allocator_traits (ou seja, no
maioria dos códigos).
A interface de alocador mínima C++11 agora é manipulada pela biblioteca padrão chamando 
allocator_traits diretamente, em vez de encapsular o alocador em uma classe interna _Wrap_alloc . Isso
reduz o tamanho do código gerado compatível com o alocador, melhora a capacidade do otimizador de
raciocinar sobre contêineres da Biblioteca Padrão em alguns casos e fornece uma melhor experiência de
depuração (porque agora você pode ver o tipo de alocador, em vez de _Wrap_alloc<your_allocator_type> no
depurador).
Foi removida a metaprogramação para personalizada allocator::reference , que os alocadores não têm
permissão para personalizar. (Os alocadores podem fazer contêineres usarem ponteiros sofisticados, mas não
referências sofisticadas.)
O front-end do compilador foi ensinado a descompactar iteradores de depuração em loops for baseados em
intervalo, melhorando o desempenho de compilações de depuração.
O caminho de redução interna de basic_string para shrink_to_fit() e para reserve() não está mais no
caminho das operações de realocação, o que reduz o tamanho do código para todos os membros de mutação.
O caminho de crescimento interno basic_string não está no caminho de shrink_to_fit() .
As operações de mutação de basic_string agora são fatoradas em funções de caminho rápido de não
alocação e de caminho lento de alocação, aumentando a probabilidade de o caso comum de não realocação
ser embutido em chamadores.
As basic_string operações de mutação agora constroem buffers realocados no estado preferencial em vez de
redimensionar em vigor. Por exemplo, uma inserção no início de uma cadeia de caracteres agora move o
conteúdo após a inserção exatamente uma vez. Ele é movido para baixo ou para o buffer recentemente
alocado. Ele não é mais movido duas vezes no caso de realocação, primeiro ao buffer alocado recentemente e,
em seguida, para baixo.
As operações que chamam a biblioteca padrão C <string> agora armazenam em cache o errno endereço
para remover a interação repetida com TLS.
Implementação is_pointer simplificada.
Concluída a alteração da expressão baseada em função SFINAE para struct e void_t -baseada.
Os algoritmos de biblioteca padrão agora evitam iteradores de pós-incrementação.
Corrigidos os avisos de truncamento ao usar alocadores de 32 bits em sistemas de 64 bits.
A atribuição de movimentação std::vector agora é mais eficiente para o caso de alocador não igual a não
POCMA reutilizando o buffer quando possível.
basic_string<char16_t> agora aciona o mesmo memcmp , memcpy e otimizações semelhantes que acionam 
basic_string<wchar_t> .
Uma limitação do otimizador que impedia os ponteiros de função de serem embutidos e que foi exposta pelo
nosso trabalho "evitar a cópia de funções" no Visual Studio 2015 Atualização 3 foi solucionada, restaurando o
desempenho de lower_bound(iter, iter, function pointer) .
A sobrecarga da verificação da ordem de entradas da depuração do iterador para includes , set_difference , 
set_symmetric_difference e set_union foi reduzida desencapsulando iteradores antes de verificar a ordem.
std::inplace_merge agora ignora elementos que já estão no lugar.
Construir std::random_device agora não constrói e, em seguida, destrói um std::string .
std::equal e std::partition tinham uma passagem de otimização de jump-threading que salvava uma
comparação de iterador.
Quando for passado ponteiros em std::reverse para T facilmente copiado, ele agora enviará uma
Outras bibliotecas
Suporte à biblioteca de software livreSuporte à biblioteca de software livre
CPPRest SDK 2.9.0CPPRest SDK 2.9.0
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
ATLATL
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
runtime do Visual C++runtime do Visual C++
IDE do Visual Studio 2017 C++
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .3
Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5Vi su a l St u d i o 2 0 1 7 v e r sã o 1 5 .5
implementação vetorizada manuscrita.
std::fill , std::equal e std::lexicographical_compare foram ensinados a enviar a memset e a memcmp para 
std::byte e para gsl::byte (e outras classes de enumeração e enumerações similares a char). Como 
std::copy envia usando is_trivially_copyable , ele não precisa de nenhuma alteração.
A biblioteca padrão não contém mais destruidores com chaves vazias cujo único comportamento era tornar os
tipos em não facilmente destrutíveis.
VcpkgVcpkg é uma ferramenta de linha de comando de software livre que simplifica bastante o processo de aquisição e
de compilação de bibliotecas estáticas e de DLLS de software livre do C++ no Visual Studio. Para obter mais
informações, consulte vcpkg: um gerenciador de pacotes para C++.
A CPPRestSDK, uma API da Web de plataforma cruzada para o C++, foi atualizada para a versão 2.9.0. Para obter
mais informações, consulte CppRestSDK 2.9.0 está disponível no GitHub.
Ainda outro conjunto de correções de compatibilidade de pesquisa de nome
Construtores de movimentação e operadores de atribuição existentes são agora corretamente marcados como
sem lançamento
Não suprimir aviso C4640 válido sobre a inicialização segura de thread de estatísticas locais no atlstr.h
A inicialização thread-safe de estáticas locais foi desativada automaticamente no conjunto de ferramentas do
XP ao usar a ATL para criar uma DLL. Agora não é. Você pode adicionar /Zc:threadSafeInit- as configurações
do seu projeto se não quiser a inicialização de thread-safe.
Novo cabeçalho "cfguard.h" para símbolos de proteção de fluxo de controle.
Agora, o desempenho de alteração de configuração é melhor para projetos nativos C++ e muito melhor para
projetos C++/CLI. Quando uma configuração de solução for ativada pela primeira vez, depois ela será mais
rápida, e todas as ativações subsequentes dessa configuração de solução serão quase instantâneas.
Vários assistentes de código e de projeto foram reescritos no estilo de caixa de diálogo de assinatura.
Adicionar classeAdicionar classe agora inicia o assistente de adição de classe diretamente. Todos os outros itens que estavam
anteriormente aqui agora estão disponíveis em Adicionar > Novo ItemAdicionar > Novo Item.
Os projetos Win32 agora estão sob a categoria área de trabalho do Windowsárea de trabalho do Windows na caixa de diálogo novonovo
projetoprojeto .
Agora, os modelos de aplicativos de desktopaplicativos de desktop e de console do WindowsWindows criam os projetos sem exibir um
assistente. Há um novo Assistente de Área de Trabalho do WindowsAssistente de Área de Trabalho do Windows na mesma categoria que exibe as
mesmas opções que o antigo assistente Aplicativo de Console do Win32Aplicativo de Console do Win32 .
Diversas operações C++ que usam o mecanismo IntelliSense para refatoração e navegação de código são
executadas muito mais rápido. Os números a seguir se baseiam na solução do Visual Studio Chromium com 3500
projetos:
https://docs.microsoft.com/pt-br/cpp/build/vcpkg
https://devblogs.microsoft.com/cppblog/cpprestsdk-2-9-0-is-available-on-github/
REC URSOREC URSO M EL H O RIA DE DESEM P EN H OM EL H O RIA DE DESEM P EN H O
Renomear 5.3x
Alterar assinatura 4.5x
Localizar Todas as Referências 4.7x
IntelliSense
O C++ agora é compatível com Ctrl + Clique em Ir para DefiniçãoIr para Definição , facilitando a navegação do mouse para
definições. O Visualizador de Estrutura do pacote de Ferramentas Avançadas de Produtividade agora também está
incluído no produto por padrão.
O novo mecanismo de banco de dados com base em SQLite agora está sendo usado por padrão. O novo
mecanismo acelera as

Continue navegando