Novidades do C++ no Visual Studio 2019

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ários. 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 Novidades de C++ no Visual Studio 2017. 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. Para obter mais informações, confira Documentação do Microsoft C++: novidades.

Novidades do C++ no Visual Studio versão 16.11

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.11, confira as novidades no Visual Studio 2019 versão 16.11.

  • O compilador agora dá suporte ao modo /std:c++20 do compilador. Anteriormente, os recursos do C++20 estavam disponíveis apenas no modo /std:c++latest no Visual Studio 2019. Os recursos que originalmente exigiam o modo /std:c++latest agora funcionam no modo /std:c++20 ou posterior, nas versões mais recentes do Visual Studio.

  • As ferramentas LLVM enviadas com o Visual Studio foram atualizadas para a LLVM 12. Para obter detalhes, confira Notas sobre a versão do LLVM.

  • O suporte Clang-cl foi atualizado para LLVM 12.

Novidades do C++ no Visual Studio versão 16.10

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.10, confira as novidades no Visual Studio 2019 versão 16.10.

  • Todos os recursos do C++20 agora estão disponíveis em /std:c++latest. Embora a implementação dos padrões C++20 (publicados no momento pela ISO) do MSVC tenha recursos completos, alguns dos principais recursos da biblioteca do C++20 serão alterados nos próximos Relatórios de Defeito (correções de bug da ISO C++20), o que poderá deixá-los incompatíveis com o ABI. Consulte o Problema 1814 da Microsoft/STL para obter mais detalhes.

    • Adição de suporte a constinit e a funções imediatas do C++20 na versão 16.10
    • As partes finais de <chrono>: novos relógios, segundos bissextos, fusos horários e análise
    • Implementação de <format> para formatação de texto
  • /openmp:llvm agora está disponível em x86 e ARM64, além de x64

  • Os diretórios de inclusão agora podem ser designados como externos com níveis de aviso de compilação personalizados e configurações de análise de código.

  • Adicionada a opção /await:strict para habilitar corrotinas no estilo C++20 em modos de idioma anteriores.

  • A visualização do depurador de std::coroutine_handle<T> agora exibe o nome e a assinatura da função de corrotina original e o ponto de suspensão atual.

  • Suporte adicionado para CMakePresets.

  • Agora você precisa aceitar ou negar a impressão digital da chave de host apresentada pelo servidor ao adicionar uma nova conexão remota no Visual Studio.

  • Foi adicionada uma opção /external ao MSVC para especificar cabeçalhos que devem ser tratados como externos para fins de aviso.

Novidades do C++ no Visual Studio versão 16.9

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.9, confira as novidades no Visual Studio 2019 versão 16.9.

  • Address Sanitizer:

    • Nosso suporte ao sanitizador de endereço no Windows está fora do modo experimental e atingiu a disponibilidade geral.

    • Expansão de suporte para RtlAllocateHeap, correção de um problema de compatibilidade com os interceptores RtlCreateHeap e RtlAllocateHeap ao criar pools de memória executáveis.

    • Adição de suporte às famílias GlobalAlloc e LocalAlloc herdadas de funções de memória. Você pode habilitar esses interceptadores definindo o sinalizador de ambiente ASAN_OPTIONS=windows_hook_legacy_allocators=true.

    • Atualização das mensagens de erro para intercalação de memória de sombra e falha de interceptação para tornar os problemas e as resoluções explícitos.

    • A integração do IDE agora pode lidar com a coleção completa de exceções que o ASan pode relatar.

    • O compilador e o vinculador sugerirão a emissão de informações de depuração se detectarem que você está criando com ASan, mas não emitindo informações de depuração.

  • Agora você pode direcionar a versão do LLVM do runtime OpenMP com a nova opção CL /openmp:llvm. Isso adiciona suporte à cláusula lastprivate em seções #pragma omp e variáveis de índice sem sinal em paralelo para loops for. No momento, a opção /openmp:llvm está disponível apenas para o destino amd64 e ainda é experimental.

  • Os projetos do CMake para Visual Studio agora têm suporte de primeira classe para o desenvolvimento remoto do Windows. Isso inclui a configuração de um projeto do CMake para direcionar o Windows ARM64, a implantação do projeto em um computador remoto com Windows e a depuração do projeto em um computador Windows remoto do Visual Studio.

  • A versão do Ninja fornecida com o Visual Studio no Windows foi atualizada para a versão 1.10. Para obter mais informações sobre o que está incluído, consulte as notas de versão do Ninja 1.10.

  • A versão do CMake fornecida com o Visual Studio foi atualizada para a versão 3.19. Para obter mais informações sobre o que está incluído, consulte as notas de versão do CMake 3.19.

  • Alguns tipos de bloqueio/proteção marcados no STL como nodiscard.

  • IntelliSense:

  • O MSVC agora determina os runtimes do Address Sanitizer corretos necessários para seus binários. Seu projeto do Visual Studio receberá automaticamente as novas alterações. Ao usar o Address Sanitizer na linha de comando, agora você apenas precisa passar /fsanitize=address para o compilador.

  • O Gerenciador de Conexões do Visual Studio agora dá suporte a chaves privadas usando o algoritmo de chave pública de ECDSA.

  • Atualização das versões do LLVM e do Clang fornecidas em nosso instalador para a v11. Leia as notas sobre a versão do LLVM e do Clang para obter mais informações.

  • Agora o Visual Studio usará as variáveis do CMake de arquivos de cadeia de ferramentas para configurar o IntelliSense. Isso proporcionará uma experiência melhor para desenvolvimentos inseridos e do Android.

  • Implementação da proposta Mais Contêineres Constexpr, que permite que destruidores e novas expressões sejam constexpr. Isso abre caminho para utilitários como constexprstd::vector e std::string.

  • Suporte estendido para IntelliSense de módulos C++20, incluindo Ir para Definição, Ir para Módulo e conclusão de membro.

  • Agora há suporte para modelos de função abreviados no compilador MSVC.

Novidades do C++ no Visual Studio versão 16.8

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.8, confira as novidades no Visual Studio 2019 versão 16.8.

  • Agora há suporte para corrotinas C++20 em /std:c++latest(ou /std:c++20 a partir do Visual Studio 2019 versão 16.11) e o cabeçalho <coroutine>.

  • O IntelliSense agora fornece suporte para <concepts> do C++20 e cabeçalhos <ranges>, além de renomeação e navegação para definições de conceito.

  • Nosso STL agora é compatível com a maioria dos Intervalos do C++20.

  • As funções condicionalmente triviais de membros especiais agora são compatíveis com o MSVC.

  • O C11 e o C17 agora são compatíveis com os switches /std:c11 e /std:c17.

  • Os aprimoramentos adicionais do STL incluem suporte completo para std::atomic_ref, std::midpoint e std::lerp e std::execution::unseq, além de otimizações para std::reverse_copy e muito mais.

  • Atualização da versão do CMake fornecida com o Visual Studio para CMake 3.18.

  • Nossas ferramentas de análise de código agora são compatíveis com o padrão SARIF 2.1: o formato padrão de log de análise estática do setor.

  • As ferramentas de build ausentes nos projetos do Linux emitirão um aviso na barra de ferramentas e uma descrição clara das ferramentas ausentes na lista de erros.

  • Agora é possível depurar os despejos de núcleo do Linux em um sistema Linux remoto ou no WSL diretamente do Visual Studio.

  • Para a geração de comentários de Doxygen para C++, incluímos opções adicionais de estilo de comentário (/*! e //!).

  • Mais anúncios do vcpkg.

  • Suporte do compilador para lambdas em contextos não avaliados.

  • Desempenho de vínculo /DEBUG:FULL aprimorado por meio da criação de PDB multithreading. Vários aplicativos grandes e jogos AAA apresentam vinculação duas a quatro vezes mais rápida.

  • O depurador do Visual Studio agora tem suporte para char8_t.

  • Suporte para projetos ARM64 usando clang-cl.

  • Suporte de intrínsecos do Intel AMX.

Novidades do C++ no Visual Studio versão 16.7

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.7, confira as novidades no Visual Studio 2019 versão 16.7.

  • Nosso suporte remoto ao C++ agora é compatível com uma maior variedade de distribuições e shells do Linux, incluindo sh, csh, bash, tsch, ksh, zsh e dash. Você pode substituir a escolha de um shell para uma conexão remota modificando a nova propriedade "shell" por meio de ConnectionManager.exe. Esse suporte foi testado com projetos do Linux baseados no MSBuild e projetos CMake visando um sistema Linux remoto ou WSL.

  • Agora você pode usar o Ninja (um sistema de build que avalia builds incrementais muito rapidamente) para aprimorar tempos de build incrementais para projetos do Linux baseados em MSBuild. Você pode aceitar esse recurso definindo "Habilitar Build Incremental" como "Com o Ninja" na Página de Propriedades Gerais. O Ninja (ninja-build) precisa ser instalado em seu sistema Linux remoto ou WSL.

  • Novos recursos de biblioteca padrão do C++20 foram implementados. Veja o Log de mudanças de STL no GitHub para uma lista detalhada.

  • Agora você pode editar e definir conexões SSH remotas padrão no Gerenciador de Conexões. Isso significa que você pode editar uma conexão remota existente (por exemplo, se seu endereço IP foi alterado) e definir conexões padrão para serem consumidas em CMakeSettings.json e launch.vs.json. As conexões SSH remotas permitem que você compile e depure projetos C++ em um sistema Linux remoto diretamente do Visual Studio.

  • Suporte aprimorado do IntelliSense para Clang no Windows (clang-cl) no Visual Studio. O caminho de inclusão do Clang agora inclui as bibliotecas do Clang. Aprimoramos a exibição de rabiscos no editor ao usar a biblioteca padrão e adicionamos suporte para C++2a no modo de Clang.

  • agora você pode testar os erros de código subjacentes e ver as correções rápidas mais sugeridas em projetos C++. Habilite esse recurso em Ferramentas > Opções > Editor de texto > C/C++ > Experimental. Defina Desabilitar Linter de Código Experimental como false. Saiba mais no Blog da Equipe do C++.

  • Adicionamos quatro novas regras de análise de código para incorporar recursos de segurança adicionais em C++ : C26817, C26818, C26819 e C26820.

  • Adicionamos suporte de primeira classe para depurar projetos CMake em sistemas remotos com gdbserver.

  • Encontre erros de corrupção de memória facilmente com uma implementação experimental do AddressSanitizer para C++ no Visual Studio, agora disponível para projetos nativos x64. Agora, também damos suporte ao uso de runtimes de depuração (/MTd, /MDd, /LDd).

  • O IntelliSense agora tem suporte básico para conceitos, inicializadores designados e vários outros recursos do C++20.

  • Os arquivos .ixx e .cppm agora são reconhecidos como C++ e serão tratados como tal pelo realce de sintaxe e pelo IntelliSense.

Novidades do C++ no Visual Studio versão 16.6

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.6, confira as novidades no Visual Studio 2019 versão 16.6.

  • Geração aprimorada de comentários de Doxygen/XML: Gere automaticamente stubs de comentário da documentação XML ou Doxygen digitando as funções /// ou /** acima. Eles agora são exibidos em dicas de ferramentas de Informações Rápidas também.

  • Suporte do Ninja para CMake para Linux/WSL: use o Ninja como o gerador subjacente ao criar projetos do CMake no WSL ou em um sistema remoto. O Ninja agora é o gerador padrão ao adicionar uma nova configuração do Linux ou do WSL.

  • Modelos de depuração para depuração remota de CMake: simplificamos os modelos de depuração de projetos CMake em um sistema Linux remoto ou WSL com o gdb.

  • Suporte inicial para conceitos do C++20: O IntelliSense agora reconhece conceitos do C++ 20 e sugere o uso deles na lista de membros.

Novidades do C++ no Visual Studio versão 16.5

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.5, confira as novidades no Visual Studio 2019 versão 16.5.

  • Suporte a variáveis de membro e modelo de Conclusões de Equipe do IntelliCode: Os desenvolvedores do C++ agora podem treinar modelos IntelliCode em suas próprias bases de código. Chamamos isso de modelo de Conclusões da Equipe, porque você se beneficia das práticas da sua equipe. Além disso, aprimoramos as sugestões de variáveis de membro do IntelliCode.

  • Melhorias do IntelliSense:

    • Agora o IntelliSense exibe nomes de tipo mais legíveis ao lidar com a Biblioteca Padrão.
    • Adicionamos a capacidade de alterar se Enter, Espaço e Tab funcionam como caracteres de confirmação e alterar se Tab é usado para Inserir Snippet. Encontre essas configurações em Ferramentas> Opções > Editor de Texto > C/C++ > Avançado > IntelliSense.
  • Gerenciador de Conexões sobre a linha de comando: agora você pode interagir com suas conexões remotas armazenadas pela linha de comando. Isso é útil para tarefas como provisionar um novo computador de desenvolvimento ou configurar o Visual Studio em integração contínua.

  • Depurar e implantar para WSL: Use o suporte nativo do Visual Studio para WSL para separar o sistema de build do sistema de implantação remota. Agora é possível criar nativamente no WSL e implanta os artefatos de build em um segundo sistema remoto para depuração. Esse fluxo de trabalho é compatível com projetos CMake e projetos Linux baseados em MSBuild.

  • Suporte para modo de conformidade FIPS 140-2: Agora o Visual Studio dá suporte ao modo de conformidade FIPS 140-2 ao desenvolver aplicativos C++ que direcionam um sistema Linux remoto.

  • Serviços de linguagem para arquivos de linguagem CMake e melhor manipulação de projetos CMake:

    • A cópia do arquivo de origem para projetos CMake que direcionam um sistema Linux remoto foi otimizada. Agora o Visual Studio mantém um "arquivo de impressão digital" do último conjunto de origens copiado remotamente e otimiza o comportamento com base no número de arquivos que foram alterados.

    • A navegação de código, como Ir para a Definição e Localizar Todas as Referências, agora é compatível com as funções, as variáveis e os destinos nos arquivos de script do CMake.

    • Adicione, remova e renomeie arquivos de origem e destinos em seus projetos CMake no IDE sem editar manualmente seus scripts do CMake. Quando você adicionar ou remover arquivos com o Gerenciador de Soluções, o Visual Studio editará automaticamente seu projeto CMake. Você também pode adicionar, remover e renomear os destinos do projeto na Exibição de Destinos do Gerenciador de Soluções.

  • Melhorias do projeto Linux: Os projetos Linux do Visual Studio agora têm um IntelliSense mais preciso e permitem controlar a sincronização de cabeçalho remoto, projeto a projeto.

Novidades do C++ no Visual Studio versão 16.4

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.4, confira as novidades no Visual Studio 2019 versão 16.4.

  • Agora a análise de código é nativamente compatível com o Clang-Tidy em projetos do MSBuild e do CMake, independentemente de você estar usando um conjunto de ferramentas do Clang ou do MSVC. As verificações do clang-tidy podem ser executadas como parte da análise de código em segundo plano, ser exibidas como avisos no editor (rabiscos) e ser exibidas na Lista de Erros.

  • Os projetos CMake do Visual Studio agora têm páginas de Visão geral para ajudar você a começar a usar o desenvolvimento multiplataforma. Essas páginas são dinâmicas e ajudam você a se conectar com um sistema Linux e adicionar uma configuração do Linux ou do WSL ao seu projeto do CMake.

  • O menu suspenso de inicialização para projetos do CMake agora exibe os destinos usados mais recentemente e pode ser filtrado.

  • O C++/a CLI agora dá suporte à interoperabilidade com o .NET Core 3.1 (ou versão superior) no Windows.

  • Agora você pode habilitar o ASan para projetos compilados com o MSVC no Windows para instrumentação do runtime do código C++ que ajuda na detecção de erros de memória.

  • Atualizações da Biblioteca Padrão C++ do MSVC:

    • C++17: Precisão geral to_chars() implementada, concluindo P0067R5 Conversões de cadeia de caracteres elementares (charconv). Isso conclui a implementação de todos os recursos de biblioteca no C++17 Standard.
    • C++20: Implementado P1754R1 Renomear conceitos para standard_case. Para incluir esses recursos, use a opção /std:c++latest do compilador (ou /std:c++20 começando no Visual Studio 2019 versão 16.11). A opção também pode ser definida na página de propriedades de configuração > do > projeto de linguagem C/C++ usando a propriedade C++ Language Standard.
  • Uma nova coleção de ferramentas denominada Insights de Build do C++ está disponível agora. Para obter mais informações sobre o comunicado, consulte o Blog da Equipe do C++.

Novidades do C++ no Visual Studio versão 16.3

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.3, confira as novidades no Visual Studio 2019 versão 16.3.

  • Desenvolvedores do C++ agora podem alternar comentários de linha usando o atalho de teclado Ctrl+K, Ctrl +/.

  • As listas de membros do IntelliSense agora são filtradas com base em qualificadores de tipo, por exemplo, const std::vector agora filtrará métodos como push_back.

  • Adicionamos esses recursos da Biblioteca Padrão do C++20 (disponível em /std:c++latest, ou /std:c++20 começando no Visual Studio 2019 versão 16.11):

    • P0487R1: Resolvendo operator>>(basic_istream&, CharT*)
    • P0616R0: Usando move() em <numeric>
    • P0758R1: is_nothrow_convertible
    • P0734R0: Extensões C++ para Conceitos
    • P0898R3: Conceitos da Biblioteca Padrão
    • P0919R3: Pesquisa Heterogênea por Contêineres Não Ordenados
  • Novas verificações de Diretriz do C++ Core, incluindo o novo conjunto de regras "Regras de Enumeração" e as regras const, enum e tipo adicionais.

  • Um novo esquema de colorização semântico padrão permite que os usuários entendam melhor seu código em um relance, a janela pilha de chamadas pode ser configurada para ocultar argumentos de modelo e o IntelliCode C++ é ativado por padrão.

  • Configure destinos de depuração e tarefas personalizadas com variáveis de ambiente usando CMakeSettings.json ou CppProperties.json ou a nova marca "env" em destinos e tarefas individuais em launch.vs.json e tasks.vs.json.

  • Os usuários agora podem usar uma ação rápida nos pacotes vcpkg ausentes para abrir automaticamente um console e instalar na instalação padrão do vcpkg.

  • A cópia de cabeçalho remoto feita por projetos do Linux (CMake e MSBuild) foi otimizada e agora é executada em paralelo.

  • O suporte nativo do Visual Studio para WSL agora dá suporte a builds paralelos para projetos do Linux baseados em MSBuild.

  • Os usuários agora podem especificar uma lista de saídas de build locais para implantar em um sistema remoto com projetos Makefile do Linux.

  • A definição de descrições no Editor de Configurações do CMake agora contém mais contexto e links para a documentação útil.

  • O modelo base do C++ para IntelliCode agora está habilitado por padrão. É possível alterar essa configuração em Ferramentas>Opções>IntelliCode.

Novidades do C++ no Visual Studio versão 16.2

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.2, confira as novidades no Visual Studio 2019 versão 16.2.

  • Para projetos locais do CMake configurados com Clang, agora a Análise de Código executa verificações de clang-tidy, sendo exibidas como parte da análise de código em segundo plano como avisos no editor (linhas ondulantes) e na Lista de Erros.

  • Atualizamos o cabeçalho <charconv> das conversões de cadeia de caracteres elementar P0067R5 do C++17:

    • Adicionamos sobrecargas to_chars() de ponto flutuante para oferecer precisão a chars_format::fixed e a chars_format::scientific (chars_format::general precision é a única parte ainda não implementada)
    • chars_format::fixed otimizado mais curto
  • Foram adicionados estes recursos da Biblioteca Padrão do C++20:

    • Disponível em /std:c++latest (ou /std:c++20 a partir do Visual Studio 2019 versão 16.11):
      • P0020R6: atomic<floating-point>
      • P0463R1: enumeração endian
      • P0482R6: char8_t tipo para caracteres e cadeias de caracteres UTF-8
      • P0653R2: to_address() para converter um ponteiro em um ponteiro bruto
    • Disponível em /std:c++17 e /std:c++latest(ou /std:c++20 a partir do Visual Studio 2019 versão 16.11):
      • P0600R1: [[nodiscard]] na biblioteca
    • Disponível incondicionalmente:
      • P0754R2: <version> cabeçalho
      • P0771R1: std::function o construtor de movimentação deve ser noexcept
  • O SDK do Windows não é mais uma dependência dos componentes CMake para Windows e CMake para Linux.

  • Melhorias no Vinculador de C++ para melhorar significativamente os tempos de build de iteração para a maior das entradas. Os tempos /DEBUG:FAST e /INCREMENTAL são, em média, duas vezes mais rápido, e /DEBUG:FULL agora é três a seis vezes mais rápido.

Novidades do C++ no Visual Studio versão 16.1

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.1, confira as novidades no Visual Studio 2019 versão 16.1.

compilador C++

  • Esses recursos do C++20 foram implementados no compilador C++, disponível /std:c++latest em (ou /std:c++20 começando no Visual Studio 2019 versão 16.11):

    • Maior capacidade de localizar os modelos de função por meio de pesquisa dependente de argumento para expressões de chamada de função com argumentos de modelo explícitos (P0846R0).
    • Inicialização atribuída (P0329R4), que permite que os membros específicos sejam selecionados na inicialização de agregação, por exemplo, usando a sintaxe Type t { .member = expr }.
  • O suporte a lambda foi revisado, resolvendo um grande número de bugs de longa data. Essa alteração é habilitada por padrão ao usar /std:c++20 ou /std:c++latest. No /std:c++17 modo de linguagem e no modo padrão (/std:c++14 ), o novo analisador pode ser habilitado usando /Zc:lambda no Visual Studio 2019 versão 16.9 ou posterior (anteriormente disponível como /experimental:newLambdaProcessor começando no Visual Studio 2019 versão 16.3), por exemplo, /std:c++17 /Zc:lambda.

Melhorias da biblioteca padrão do C++

  • As seguintes versões prévias de recursos do C++20 foram adicionados à nossa implementação da Biblioteca Padrão C++, disponível em /std:c++latest:
    • starts_with e ends_with para basic_string e basic_string_view.
    • contains para contêineres associativos.
    • remove, remove_if, e unique para list e forward_list agora retornam size_type.
    • shift_left e shift_right adicionados a <algorithm>.

C++ IDE

IntelliCode paraC++

O IntelliCode agora é fornecido como um componente opcional na carga de trabalho Desenvolvimento para desktop com C++ . Para saber mais, confira IntelliCode aprimorado para C++ agora vem com o Visual Studio 2019.

O IntelliCode usa seu próprio treinamento abrangente e seu contexto de código para colocar o que você mais provavelmente usará na parte superior da 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.

Os novos recursos do IntelliCode (modelos personalizados, suporte a C++ e inferência EditorConfig) são desabilitados por padrão. Para ativar, acesse Ferramentas > Opções > IntelliCode > Geral. Esta versão do IntelliCode tem precisão melhorada e inclui suporte para funções gratuitas. Para obter mais informações, consulte Sugestões de preenchimento de código auxiliadas por IA para C++ usando IntelliCode.

Aprimoramentos de Informações Rápidas

  • A dica de ferramenta Informações Rápidas agora respeita a colorização semântica do seu editor. Ela também tem um novo link Pesquisar Online que pesquisará informações sobre o constructo de código focalizado na documentação online. O link fornecido por Informações Rápidas para o código de rabiscos vermelhos procurará o erro online. Dessa forma, você não precisa redigitar a mensagem no navegador. Para saber mais, confira Melhorias de Informações Rápidas no Visual Studio 2019: Colorização e busca online.

Aprimoramentos gerais

  • A Barra de Modelo pode preencher o menu suspenso com base em instanciações desse modelo em sua base de código.

  • Lâmpadas para diretivas #include ausentes que podem ser instaladas por vcpkg e preenchimento automático de pacotes disponíveis para a diretiva find_package do CMake.

  • A Página de Propriedades Gerais para projetos C++ foi revisada. Algumas opções agora estão listadas em uma nova página Avançada. A página Avançado também inclui as novas propriedades de sua arquitetura preferencial do conjunto de ferramentas, bibliotecas de depuração, a versão secundária do conjunto de ferramentas MSVC e builds do Unity (jumbo).

Suporte para CMake

  • Atualizamos a versão do CMake fornecida com o Visual Studio para 3.14. Esta versão adiciona suporte interno para geradores de MSBuild direcionados a projetos do Visual Studio 2019, bem como APIs de integração de IDE baseado em arquivo.

  • Adicionamos os aperfeiçoamentos no Editor de Configurações do CMake, incluindo suporte para o WSL (Subsistema do Windows para Linux) e configurações de caches existentes, alterações ao build padrão e raízes de instalação, bem como suporte a variáveis de ambiente em configurações do Linux CMake.

  • Os preenchimentos e informações rápidas para comandos internos CMake, variáveis e propriedades facilitam a edição dos arquivos CMakeLists.txt.

  • Integramos suporte 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.

Linux e o Subsistema do Windows para Linux

Análise de Código

Builds remotos

  • Agora os usuários podem separar computadores de build remoto de computadores de depuração remota ao direcionar para Linux, em projetos do MSBuild e do CMake.

  • O registro aprimorado para conexões remotas torna mais fácil diagnosticar problemas no desenvolvimento multiplataforma.

Novidades do C++ no Visual Studio versão 16.0

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 16.0, confira as novidades no Visual Studio 2019 versão 16.0.

compilador C++

  • 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 opção /std:c++latest agora inclui recursos do C++20 que não são necessariamente completos, incluindo o suporte inicial para o operador do C++20 <=> ("espaçonave") 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++.

Geração de código, segurança, diagnóstico e controle de versão

Análise aprimorada com /Qspectre para fornecer assistência de mitigação para Variante de Spectre 1 (CVE-2017-5753). Para obter mais informações, consulte Mitigações do Spectre no MSVC.

Melhorias da biblioteca padrão do C++

  • 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 é a de que o compilador não produz mais diagnóstico que indique problemas na linha 15732480 ou 16707566 de <type_traits> ou <variant>.

Melhorias de desempenho/taxa de transferência no compilador e na biblioteca padrão

  • 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.

  • Foi adicionada uma nova opção de linha de comando de inlining /Ob3, que é uma versão mais agressiva de /Ob2. /O2 (otimizar o binário para maior velocidade) ainda implica /Ob2 por padrão. Se você achar que o compilador não executa o inlining agressivamente o suficiente, considere passar /O2 -Ob3.

  • Adicionamos suporte para funções intrínsecas da Biblioteca Matemática de Vetor Curto (SVML). Essas funções calculam os equivalentes do vetor de 128 bits, 256 bits ou 512 bits. Adicionamos para dar suporte à vetorização manual 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 criação de um arquivo em branco que inclui apenas <vector> in half. 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>. A vantagem é que apenas as unidades de tradução que realmente usam os componentes <stdexcept> ou <ostream> pagam o custo da taxa de transferência para compilá-los.

  • if constexpr foi aplicado em mais lugares na biblioteca padrão para aumento da taxa de 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 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 colocava seis funções entre _beginthreadex e o objeto callable 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 obscuro de medição de tempo em que um construtor de std::thread para de responder se o relógio do sistema fosse alterado no exato momento que o std::thread estivesse 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 na melhor interação do depurador: exceções que você lança por meio da biblioteca padrão nos locais afetados agora são mostradas como sendo lançadas de seu site original de lançamento, e não como nosso relançamento. Nem todos os blocos de captura de biblioteca padrão foram eliminados. Esperamos que o número de blocos de captura que serão reduzidos nas 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, com um list<int> que já tem o tamanho de 3, uma chamada para assign(4, 1729) agora substitui os valores int nos primeiros três nós de 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.

C++ IDE

Suporte de Live Share para C++

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

IntelliSense de modelo

A Barra de Modelo agora utiliza a interface do usuário de Janela 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çã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 recentemente na Barra de Modelo permite alternar rapidamente entre conjuntos anteriores de argumentos de exemplo.

Nova experiência de janela iniciar

Ao iniciar o IDE, uma nova janela Iniciar é exibida. Ela tem opções para abrir projetos recentes, clonar código do controle do código-fonte, abrir código local como uma solução ou 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.

Novos nomes para alguns modelos de projeto

Modificamos vários nomes e descrições de modelo de projeto de acordo com a caixa de diálogo Novo Projeto atualizada.

Diversos aprimoramentos de produtividade

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:
    • Adicione o #include ausente
    • NULL em nullptr
    • Adicionar ponto e vírgula ausente
    • Resolver namespace ou escopo ausente
    • Substituir operandos de indireção inválidos (* para & e & 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

Para obter mais informações, veja Aprimoramentos de produtividade do C++ no Visual Studio 2019 Versão Prévia 2.

Suporte para CMake

  • 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 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.

  • Avisos de análise estática agora são processados em segundo plano e exibidos no editor para projetos do 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çõ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 TudoCtrl + Shift + B.

Integração de IncrediBuild

O IncrediBuild foi incluído como um componente opcional na carga de trabalho Desenvolvimento para desktop com C++ . O Monitor de Compilação do IncrediBuild foi totalmente integrado no IDE do Visual Studio. Para saber mais, confira Visualizar a compilação com o Monitor de Compilação do IncrediBuild e o Visual Studio 2019.

Depuração

  • Para aplicativos C++ em execução no Windows, os arquivos PDBs agora são carregados em um processo separado de 64 bits. Essa mudança aborda 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ção, Autos e Locais.

Desenvolvimento da Área de Trabalho do Windows com C++

  • 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
    • 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 dessas tecnologias está arquivado no Microsoft Learn e no repositório VCSamples do GitHub.

  • O kit de desenvolvimento (SDK) 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 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.

Desenvolvimento móvel com C++ (Android e iOS)

A experiência do Android C++ agora usa por padrão o SDK do Android 25 e o NDK do Android 16b.

Conjunto de ferramentas de plataforma Clang/C2

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.

Análise de código

Teste de unidade

O modelo de projeto de teste do C++ gerenciado não está mais disponível. Você pode continuar usando a estrutura de teste do C++ gerenciado em seus projetos existentes. Para novos testes de unidade, considere usar uma das estruturas de teste nativas para as quais o Visual Studio fornece modelos (MSTest, Google Test) ou o modelo de projeto de teste de C# gerenciado.