Partilhar via


Novidades do C++ no Visual Studio 2019

O Visual Studio 2019 traz muitas atualizações e correções para o ambiente Microsoft C++. Corrigimos muitos bugs e problemas no compilador e nas ferramentas. Muitos desses problemas foram enviados pelos clientes por meio das opções Relatar um problema e Fornecer uma sugestão em Enviar feedback. Obrigado por relatar bugs!

Para obter mais informações sobre o que há de novo em todo o Visual Studio, visite O que há de novo no Visual Studio 2019. Para obter informações sobre as novidades do C++ no Visual Studio 2017, consulte Novidades do C++ no Visual Studio 2017. Para obter informações sobre as novidades do C++ no Visual Studio 2015 e versões anteriores, consulte Visual C++ What's New 2003 a 2015.

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, consulte O que há de novo no Visual Studio 2019 versão 16.11.

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

  • As ferramentas LLVM fornecidas com o Visual Studio foram atualizadas para LLVM 12. Para obter detalhes, consulte as notas de versão do LLVM.

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

O que há de novo no 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, consulte O que há de novo 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 do MSVC dos padrões C++20 (conforme publicado atualmente pela ISO) esteja completa, espera-se que alguns dos principais recursos da biblioteca C++20 sejam alterados pelos próximos Relatórios de Defeito (correções de bugs ISO C++20) que podem alterá-los de forma incompatível com ABI. Consulte Microsoft/STL Issue #1814 para obter mais detalhes.

    • C++20 funções imediatas e suporte constinit adicionado em 16.10
    • As peças finais de <chrono>: novos relógios, segundos bissextos, fusos horários e análise
    • Implementação de para formatação de <format> 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 /await:strict opção para habilitar co-rotinas no estilo C++20 em modos de linguagem anteriores.

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

  • Adicionado suporte para CMakePresets.

  • Agora é necessário aceitar ou negar a impressão digital da chave de host apresentada pelo servidor ao adicionar uma nova conexão remota no Visual Studio.

  • Adicionado um /external switch para MSVC para especificar cabeçalhos que devem ser tratados como externos para fins de aviso.

O que há de novo no 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, consulte O que há de novo no Visual Studio 2019 versão 16.9.

  • Endereço Sanitizer:

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

    • Suporte expandido RtlAllocateHeap , corrigido um problema de compatibilidade e intercetadores ao RtlCreateHeapRtlAllocateHeap criar pools de memória executável.

    • Adicionado suporte para o legado GlobalAlloc e LocalAlloc família de funções de memória. Você pode habilitar esses intercetadores definindo o sinalizador ASAN_OPTIONS=windows_hook_legacy_allocators=truede ambiente .

    • Mensagens de erro atualizadas para intercalação de memória de sombra e falha de intercetação para tornar os problemas e resoluções explícitos.

    • A integração 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 detetarem que você está criando com ASan, mas não emitindo informações de depuração.

  • Agora você pode direcionar a versão LLVM do tempo de execução OpenMP com o novo switch /openmp:llvmCL. Isso adiciona suporte para a lastprivate cláusula em #pragma omp seções e variáveis de índice não assinadas em loops paralelos for . O /openmp:llvm switch está atualmente disponível apenas para o alvo amd64 e ainda é experimental.

  • Os projetos do Visual Studio CMake agora têm suporte de primeira classe para desenvolvimento remoto do Windows. Isso inclui configurar um projeto CMake para direcionar o Windows ARM64, implantar o projeto em uma máquina Windows remota e depurar o projeto em uma máquina Windows remota 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.

  • Marcado muitos tipos de bloqueio/proteção no STL como nodiscard.

  • IntelliSense:

  • O MSVC agora determina os tempos de execução corretos do sanitizer de endereço necessários para seus binários. Seu projeto do Visual Studio obterá automaticamente as novas alterações. Ao usar o sanitizer de endereço na linha de comando, agora você só precisa passar /fsanitize=address para o compilador.

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

  • Atualizadas as versões de LLVM e Clang enviadas em nosso instalador para v11. Leia as notas de versão do LLVM e Clang para obter mais informações.

  • O Visual Studio agora usará variáveis CMake de arquivos da cadeia de ferramentas para configurar o IntelliSense. Isso proporcionará uma melhor experiência para desenvolvimento embarcado e Android.

  • Implementação da proposta More Constexpr Containers, 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 módulos C++20 IntelliSense, incluindo Go To Definition, Go To Module e conclusão de membros.

  • Modelos de função abreviados agora são suportados 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, consulte O que há de novo no Visual Studio 2019 versão 16.8.

  • As co-rotinas do C++20 agora são suportadas em /std:c++latest (ou /std:c++20 a partir do Visual Studio 2019 versão 16.11) e no <coroutine> cabeçalho.

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

  • Nossa STL agora tem suporte para a maioria dos intervalos C++20.

  • Funções de membro especiais condicionalmente triviais agora são suportadas no MSVC.

  • C11 e C17 agora são suportados sob os /std:c11 interruptores e /std:c17 .

  • Melhorias adicionais de STL incluem suporte total para std::atomic_refotimizações e std::midpointstd::lerpstd::execution::unseqe , para std::reverse_copy, e muito mais.

  • Versão atualizada do CMake fornecida com o Visual Studio para CMake 3.18.

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

  • Ferramentas de compilação ausentes em projetos Linux agora emitirão um aviso na barra de ferramentas e uma descrição clara das ferramentas ausentes na lista de erros.

  • Agora você pode depurar dumps de núcleo do Linux em um sistema Linux remoto ou WSL diretamente do Visual Studio.

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

  • Anúncios vcpkg adicionais.

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

  • /DEBUG:FULL desempenho do link melhorado pela criação de PDB multi-threading. Várias aplicações grandes e jogos AAA vêem ligações entre 2 a 4 vezes mais rápidas.

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

  • Suporte para projetos ARM64 usando clang-cl.

  • Suporte intrínseco Intel AMX .

O que há de novo no 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, consulte O que há de novo no Visual Studio 2019 versão 16.7.

  • Nosso suporte remoto a C++ agora suporta uma gama mais ampla de distros e shells 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" via ConnectionManager.exe. Este suporte foi testado com projetos Linux baseados em MSBuild e projetos CMake destinados a um sistema Linux remoto ou WSL.

  • Agora você pode usar o Ninja (um sistema de compilação que avalia compilações incrementais muito rapidamente) para melhorar os tempos de compilação incrementais para projetos Linux baseados em MSBuild. Você pode optar por esse recurso definindo "Ativar compilação incremental" como "Com Ninja" na página Geral de propriedades. Ninja (ninja-build) deve ser instalado no seu sistema Linux remoto ou WSL.

  • Novos recursos da biblioteca padrão do C++20 foram implementados. Consulte o STL Changelog no GitHub para obter 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 no CMakeSettings.json e launch.vs.json. As conexões SSH remotas permitem que você crie 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 clang agora inclui as bibliotecas clang, melhoramos a exibição de squiggle no editor ao usar a biblioteca std e adicionamos suporte para C++2a no modo clang.

  • Agora você pode experimentar sublinhar erros de código e ver mais correções rápidas sugeridas em projetos C++. Habilite esse recurso em Opções de > Ferramentas > Editor de Texto > C/C++ > Experimental. Defina Disable Experimental Code Linter como false. Saiba mais no Blog da equipe C++.

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

  • Adicionamos suporte de primeira classe para depuração de 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 suportamos o uso de tempos de execução 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.

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

O que há de novo no 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, consulte O que há de novo no Visual Studio 2019 versão 16.6.

  • Geração melhorada de comentários Doxygen/XML: Gere automaticamente stubs de comentários de documentos Doxygen ou XML digitando /// ou /** acima das funções. Agora, eles também são exibidos nas dicas de ferramentas de Informações Rápidas.

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

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

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

O que há de novo no 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, consulte O que há de novo no Visual Studio 2019 versão 16.5.

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

  • Melhorias no IntelliSense:

    • O IntelliSense agora exibe nomes de tipo mais legíveis ao lidar com a Biblioteca Padrão.
    • Adicionámos a capacidade de alternar se Enter, Espaço e Tab funcionam como carateres de confirmação e de alternar se Tab é utilizado para Inserir Fragmento. Encontre essas configurações em Opções de Ferramentas >> Editor de Texto > C/C++ > Advanced > IntelliSense.
  • Gerenciador de conexões na linha de comando: Agora você pode interagir com suas conexões remotas armazenadas através da linha de comando. É útil para tarefas como provisionar uma nova máquina 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 seu sistema de compilação do seu sistema de implantação remota. Agora você pode criar nativamente no WSL e implantar os artefatos de compilação em um segundo sistema remoto para depuração. Este fluxo de trabalho é suportado por projetos CMake e projetos Linux baseados em MSBuild.

  • Suporte para o modo de conformidade FIPS 140-2: O Visual Studio agora oferece suporte ao modo de conformidade FIPS 140-2 ao desenvolver aplicativos C++ destinados a um sistema Linux remoto.

  • Serviços linguísticos para ficheiros CMake Language e melhor manipulação do projeto CMake:

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

    • Recursos de navegação de código, como Go To Definition e Find All References, agora são suportados para funções, variáveis e destinos em arquivos de script CMake.

    • Adicione, remova e renomeie arquivos de origem e destinos em seus projetos CMake do IDE sem editar manualmente seus scripts CMake. Quando você adiciona ou remove 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 a partir da Exibição de Destinos do Gerenciador de Soluções.

  • Melhorias no projeto Linux: Os projetos do Visual Studio Linux agora têm IntelliSense mais preciso e permitem que você controle a sincronização remota de cabeçalho 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, consulte O que há de novo no Visual Studio 2019 versão 16.4.

  • A Análise de Código agora suporta Clang-Tidy nativamente projetos MSBuild e CMake, quer você esteja usando um conjunto de ferramentas Clang ou MSVC. As verificações de arrumação de glanges podem ser executadas como parte da análise de código em segundo plano, aparecer como avisos no editor (squiggles) e exibidas na Lista de Erros.

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

  • O menu suspenso de lançamento para projetos CMake agora exibe seus alvos usados mais recentemente e pode ser filtrado.

  • C++/CLI agora suporta interoperabilidade com .NET Core 3.1 e superior no Windows.

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

  • Atualizações para a biblioteca padrão C++ do MSVC:

    • C++17: Implementou to_chars() precisão geral, completando P0067R5 Conversões de String Elementares (charconv). Isso conclui a implementação de todos os recursos da biblioteca no padrão C++17.
    • C++20: Implementado P1754R1 Renomear conceitos para standard_case. Para incluir esses recursos, use a /std:c++latest opção de compilador (ou /std:c++20 a partir do Visual Studio 2019 versão 16.11). A opção também pode ser definida na página de propriedades do projeto Configuration Properties > C/C++ > Language usando a propriedade C++ Language Standard .
  • Uma nova coleção de ferramentas chamada C++ Build Insights já está disponível. Para obter mais informações sobre o anúncio, consulte o Blog da equipe C++.

O que há de novo no 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, consulte O que há de novo no Visual Studio 2019 versão 16.3.

  • Os desenvolvedores de 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 filtra métodos como push_back.

  • Adicionamos estes recursos da Biblioteca Padrão do C++20 (disponíveis em /std:c++latest, ou /std:c++20 a partir do Visual Studio 2019 versão 16.11):

    • P0487R1: Fixação operator>>(basic_istream&, CharT*)
    • P0616R0: Usando move() em <numeric>
    • P0758R1: is_nothrow_convertible
    • P0734R0: Extensões C++ para conceitos
    • P0898R3: Conceitos de biblioteca padrão
    • P0919R3: Pesquisa heterogênea para contêineres não ordenados
  • Novas verificações de diretrizes principais do C++, incluindo o novo conjunto de regras "Enum Rules" e regras adicionais const, enume de tipo.

  • Um novo esquema de colorização semântica padrão permite que os usuários entendam melhor seu código rapidamente, a janela da pilha de chamadas pode ser configurada para ocultar argumentos de modelo e o C++ IntelliCode é on-by-default.

  • Configure destinos de depuração e tarefas personalizadas com variáveis de ambiente usando CMakeSettings.json ou CppProperties.json ou a nova tag "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 em 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 Linux (CMake e MSBuild) foi otimizada e agora é executada em paralelo.

  • O suporte nativo do Visual Studio para WSL agora oferece suporte a compilações paralelas para projetos Linux baseados em MSBuild.

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

  • As descrições de configuração no CMake Settings Editor agora contêm mais contexto e links para documentação útil.

  • O modelo base C++ para IntelliCode agora está habilitado por padrão. Você pode alterar essa configuração indo para Opções de Ferramentas>>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, consulte O que há de novo no Visual Studio 2019 versão 16.2.

  • Para projetos CMake locais configurados com o Clang, a Análise de Código agora executa verificações organizadas por clang, aparecendo como parte da análise de código em segundo plano como avisos no editor (squiggles) e na Lista de Erros.

  • Atualizado o <charconv> cabeçalho para as conversões de cadeia de caracteres P0067R5 Elementary do C++17:

    • Adicionadas sobrecargas de ponto to_chars() flutuante e chars_format::fixedchars_format::scientific precisão (chars_format::general precision é a única parte ainda não implementada)
    • Otimizado chars_format::fixed mais curto
  • 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 digite para caracteres UTF-8 e strings
      • 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 move construtor deve ser noexcept
  • O SDK do Windows não é mais uma dependência para os componentes CMake para Windows e CMake para Linux.

  • Melhorias no vinculador C++ para melhorar significativamente os tempos de compilação de iteração para a maior entrada. /DEBUG:FAST e /INCREMENTAL os tempos são, em média, duas vezes mais rápidos, sendo /DEBUG:FULL agora três a seis vezes mais rápidos.

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, consulte O que há de novo no Visual Studio 2019 versão 16.1.

Compilador C++

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

    • Maior capacidade de encontrar 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 designada (P0329R4), que permite que membros específicos sejam selecionados na inicialização agregada, por exemplo, usando a Type t { .member = expr } sintaxe.
  • O suporte ao Lambda foi reformulado, abordando 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 idioma 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 início no Visual Studio 2019 versão 16.3), por exemplo, /std:c++17 /Zc:lambda.

Melhorias na biblioteca padrão do C++

  • Esses recursos do C++20 foram adicionados à nossa implementação da Biblioteca Padrão do C++, disponível em /std:c++latest:
    • starts_with e ends_with para basic_string e basic_string_view.
    • contains para contentores associativos.
    • remove, remove_if, e unique para list e forward_list agora voltar size_type.
    • shift_left e shift_right adicionado a <algorithm>.

C++ IDE

IntelliCode para C++

O IntelliCode agora é fornecido como um componente opcional na carga de trabalho de desenvolvimento de desktop com C++ . Para obter mais informações, consulte Improved C++ IntelliCode now Comes with Visual Studio 2019.

O IntelliCode usa seu próprio treinamento extensivo e seu contexto de código para colocar o que você provavelmente usará no topo da sua lista de conclusão. Muitas vezes, pode eliminar a necessidade de rolar para baixo através da lista. Para C++, o IntelliCode oferece mais ajuda ao usar 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 ativá-los, vá para Opções de Ferramentas >> IntelliCode > Geral. Esta versão do IntelliCode melhorou a precisão e inclui suporte para funções livres. Para obter mais informações, consulte AI-Assisted Code Completion Suggestions Come to C++ via IntelliCode.

Melhorias no Quick Info

  • A dica de ferramenta Informações rápidas agora respeita a colorização semântica do seu editor. Ele também tem um novo link de pesquisa on-line que irá procurar documentação on-line para obter informações sobre a construção de código pairado. O link fornecido pelo Quick Info para código vermelho irá procurar o erro on-line. Dessa forma, você não precisa digitar novamente a mensagem em seu navegador. Para obter mais informações, consulte Melhorias de informações rápidas no Visual Studio 2019: colorização e pesquisa online.

Melhorias gerais

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

  • Lâmpadas para diretivas ausentes #include que vcpkg pode instalar e preenchimento automático de pacotes disponíveis para a diretiva CMake find_package .

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

Suporte CMake

  • Atualizamos a versão do CMake que acompanha o Visual Studio para 3.14. Esta versão adiciona suporte interno para geradores MSBuild destinados a projetos do Visual Studio 2019, bem como APIs de integração IDE baseadas em arquivos.

  • Adicionamos melhorias ao CMake Settings Editor, incluindo suporte para Windows Subsystem for Linux (WSL) e configurações de caches existentes, alterações nas raízes de compilação e instalação padrão e suporte para variáveis de ambiente em configurações do Linux CMake.

  • Conclusão e informações rápidas para comandos, variáveis e propriedades CMake integrados facilitam a edição de seus CMakeLists.txt arquivos.

  • Integramos suporte para edição, construção e depuração de projetos CMake com Clang/LLVM. Para obter mais informações, consulte Suporte a Clang/LLVM no Visual Studio.

Linux e o Subsistema Windows para Linux

Análise de código

Compilações remotas

  • Os usuários agora podem separar máquinas de compilação remotas de máquinas de depuração remotas ao direcionar Linux em projetos MSBuild e CMake.

  • O registro aprimorado para conexões remotas facilita o diagnóstico de problemas no desenvolvimento entre plataformas.

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, consulte O que há de novo no Visual Studio 2019 versão 16.0.

Compilador C++

  • Suporte aprimorado para recursos C++17 e correções de correção, além de suporte experimental para recursos C++20, como módulos e co-rotinas. Para obter informações detalhadas, consulte Aprimoramentos de conformidade C++ no Visual Studio 2019.

  • A /std:c++latest opção agora inclui recursos do C++20 que não estão necessariamente completos, incluindo suporte inicial para o operador <=> C++20 ("nave espacial") para comparação de três vias.

  • A opção /Gm do compilador C++ agora está obsoleta. Considere desativar o /Gm switch em seus scripts de compilação se ele estiver explicitamente definido. No entanto, você também pode ignorar com segurança o aviso de preterição do /Gm, porque ele não é tratado como um erro ao usar "Tratar avisos como erros" (/WX).

  • À medida que o MSVC começa a implementar recursos do rascunho padrão do C++20 sob a /std:c++latest bandeira, /std:c++latest agora é incompatível com /clr (todos os sabores), /ZWe /Gm. No Visual Studio 2019, use /std:c++17 ou /std:c++14 modos ao compilar com /clr, /ZWou /Gm (mas veja o marcador anterior).

  • Os cabeçalhos pré-compilados não são mais gerados por padrão para aplicativos de console e desktop C++.

Codegen, segurança, diagnóstico e controle de versão

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

Melhorias na biblioteca padrão do C++

  • Implementação de recursos adicionais da biblioteca C++17 e C++20 e correções de correção. Para obter informações detalhadas, consulte Aprimoramentos de conformidade C++ no Visual Studio 2019.

  • Clang-Format foi aplicado aos cabeçalhos de biblioteca padrão C++ para melhorar a legibilidade.

  • Como o Visual Studio agora oferece suporte a Just My Code for C++, a biblioteca padrão não precisa mais fornecer máquinas personalizadas para std::function obter std::visit o mesmo efeito. A remoção dessa maquinaria não tem, em grande medida, efeitos visíveis para o utilizador. Uma exceção é que o compilador não produzirá mais diagnósticos que indiquem 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

  • Crie melhorias na taxa de transferência, incluindo a maneira como o vinculador lida com E/S de arquivo e o tempo de link na mesclagem e criação do tipo PDB.

  • Adicionado suporte básico para vetorização OpenMP SIMD. Você pode habilitá-lo usando a nova opção /openmp:experimentaldo compilador. Esta opção permite que loops anotados com #pragma omp simd sejam potencialmente vetorizados. A vetorização não é garantida, e loops anotados, mas não vetorizados, receberão um aviso relatado. Não há suporte para cláusulas SIMD; eles são ignorados e um aviso é relatado.

  • Adicionada uma nova opção /Ob3de linha de comando inline, 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 inline agressivamente o suficiente, considere passar /O2 -Ob3.

  • Adicionamos suporte para funções intrínsecas SVML (Short Vetor Math Library). Essas funções calculam os equivalentes vetoriais de 128 bits, 256 bits ou 512 bits. Nós os adicionamos para suportar a vetorização manual de loops com chamadas para funções de biblioteca de matemática e certas outras operações, como divisão de inteiros. Consulte o Guia intrínseco da Intel para obter as definições das funções suportadas.

  • Otimizações novas e melhoradas:

    • Dobragem constante e simplificações aritméticas para expressões usando intrínsecas vetoriais SIMD, para formas flutuantes e inteiras.

    • Uma análise mais poderosa para extrair informações do fluxo de controle (instruções if/else/switch) para remover ramificações sempre comprovadamente verdadeiras ou falsas.

    • Desenrolamento melhorado do memset para usar instruções vetoriais SSE2.

    • Remoção melhorada de cópias struct/class inúteis, especialmente para programas C++ que passam por valor.

    • Otimização melhorada do código usando memmove, como std::copy ou std::vector e std::string construção.

  • Otimizou o design físico da 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> pela metade. Como consequência, talvez seja necessário adicionar #include diretivas para cabeçalhos que foram incluídos anteriormente indiretamente. Por exemplo, o código que usa std::out_of_range agora pode precisar adicionar #include <stdexcept>. Código que usa um operador de inserção de fluxo agora pode precisar adicionar #include <ostream>. A vantagem é que apenas as unidades de tradução que realmente usam <stdexcept> ou <ostream> componentes pagam o custo de taxa de transferência para compilá-los.

  • if constexpr foi aplicado em mais locais na biblioteca padrão para melhorar a taxa de transferência e reduzir o 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 deteção de vinculação dinâmica em tempo de execução para a biblioteca de algoritmos paralelos não usa mais uma página inteira para armazenar a matriz de ponteiro de função. A marcação dessa memória somente leitura foi considerada não mais relevante para fins de segurança.

  • O std::thread construtor não espera mais que o thread comece e não insere mais tantas camadas de chamadas de função entre a biblioteca _beginthreadex C subjacente e o objeto chamável fornecido. Anteriormente std::thread coloque seis funções entre _beginthreadex e o objeto chamável fornecido. Este 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 temporização obscuro, onde um std::thread construtor pararia de responder se o relógio do sistema mudasse no momento exato em que estava std::thread sendo criado.

  • Corrigida uma regressão de desempenho que introduzimos ao std::hash implementar std::hash<std::filesystem::path>o .

  • A biblioteca padrão agora usa destruidores em vez de blocos de captura em vários lugares para alcançar a correção. Essa alteração resulta em uma melhor interação do depurador: as exceções lançadas pela biblioteca padrão nos locais afetados agora aparecem como sendo lançadas do site de lançamento original, em vez de nossa reversão. Nem todos os blocos de captura de bibliotecas padrão foram eliminados. Esperamos que o número de blocos de captura seja reduzido em versões posteriores do MSVC.

  • O codegen subótimo causado std::bitset por um lance condicional dentro de uma noexcept função foi corrigido pelo fatoramento do caminho de lançamento.

  • A família e std::unordered_* usam std::list iteradores sem depuração internamente em mais lugares.

  • Vários std::list membros foram alterados para reutilizar nós de lista sempre que possível, em vez de realocá-los e realocá-los. Por exemplo, dado um list<int> que já tem um tamanho de 3, uma chamada para assign(4, 1729) agora substitui os int valores nos três primeiros nós da lista e aloca um novo nó de lista com o valor 1729.

  • Todas as chamadas de biblioteca padrão para erase(begin(), end()) foram alteradas para clear().

  • std::vector agora inicializa e apaga elementos de forma mais eficiente em certos casos.

  • Melhorias para std::variant torná-lo mais otimizador-friendly, resultando em melhor código gerado. Code inlining agora é muito melhor com std::visito .

C++ IDE

Suporte a C++ Live Share

O Live Share agora oferece suporte a C++, permitindo que os desenvolvedores que usam o Visual Studio ou o Visual Studio Code colaborem em tempo real. Para obter mais informações, consulte Anunciando o Live Share para C++: compartilhamento e colaboração Real-Time

Modelo IntelliSense

A Barra de Modelos agora usa a interface do usuário da Janela de Visualização em vez de uma janela modal, suporta modelos aninhados e preenche previamente todos os argumentos padrão na Janela de Visualização. Para obter mais informações, consulte Aprimoramentos do modelo IntelliSense para Visual Studio 2019 Preview 2. Uma lista suspensa Usado mais recentemente na barra de modelos permite alternar rapidamente entre conjuntos anteriores de argumentos de exemplo.

Nova experiência na janela Iniciar

Ao iniciar o IDE, uma nova janela Iniciar é exibida. Ele 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 uma pasta, ou criar um novo projeto. A caixa de diálogo Novo Projeto também foi revisada para uma experiência filtrável de pesquisa inicial.

Novos nomes para alguns modelos de projeto

Modificamos vários nomes e descrições de modelos de projeto para se adequarem à caixa de diálogo Novo Projeto atualizada.

Várias melhorias de produtividade

O Visual Studio 2019 inclui os seguintes recursos que ajudarão a tornar a codificação mais fácil e intuitiva:

  • Correções rápidas para:
    • Adicionar ausente #include
    • NULL Para nullptr
    • Adicionar ponto-e-vírgula ausente
    • Resolver namespace ou escopo ausente
    • Substitua operandos de indireção incorretos (* para & e & para *)
  • Informações rápidas para um bloco passando o mouse sobre a chave de fechamento
  • Peek Header / Arquivo de código
  • Ir para Definição em #include abre o arquivo

Para obter mais informações, consulte Aprimoramentos de produtividade em C++ no Visual Studio 2019 Preview 2.

Suporte CMake

  • Suporte para CMake 3.14

  • O Visual Studio agora pode abrir caches CMake existentes gerados por ferramentas externas, como CMakeGUI, sistemas de meta-compilação personalizados ou scripts de compilação que invocam cmake.exe si mesmos.

  • Desempenho melhorado do IntelliSense.

  • Um novo editor de configurações fornece uma alternativa para editar manualmente o arquivo CMakeSettings.json e fornece alguma paridade com CMakeGUI.

  • O Visual Studio ajuda a inicializar seu desenvolvimento em C++ com o CMake no Linux, detetando se você tem uma versão compatível do CMake em sua máquina Linux. Se não, ele se oferece para instalá-lo para você.

  • Configurações incompatíveis em CMakeSettings, como arquiteturas incompatíveis ou configurações incompatíveis do gerador CMake, mostram rabiscos no editor JSON e erros na lista de erros.

  • A cadeia de ferramentas vcpkg é automaticamente detetada e ativada para projetos CMake que são abertos no IDE depois vcpkg integrate install de executados. Esse comportamento pode ser desativado especificando um arquivo de cadeia de ferramentas vazio em CMakeSettings.

  • Os projetos CMake agora habilitam a depuração Just My Code por padrão.

  • Os avisos de análise estática agora são processados em segundo plano e exibidos no editor para projetos CMake.

  • Crie e configure mensagens 'begin' e 'end' mais claras para projetos CMake e suporte para a interface do usuário de progresso de compilação do Visual Studio. Além disso, agora há uma configuração de verbosidade do CMake em Opções de ferramentas > para personalizar o nível de detalhes das mensagens de compilação e configuração do CMake na janela de saída.

  • A cmakeToolchain configuração agora é suportada no CMakeSettings.json para especificar cadeias de ferramentas sem modificar manualmente a linha de comando CMake.

  • Um novo atalho de menu Criar tudoCtrl+Shift+B.

Integração com IncrediBuild

IncrediBuild está incluído como um componente opcional no desenvolvimento Desktop com carga de trabalho C++. O IncrediBuild Build Monitor está 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.

Depuração

  • Para aplicativos C++ executados no Windows, os arquivos PDB agora são carregados em um processo separado de 64 bits. Essa alteração aborda uma série de falhas causadas pela falta de memória do depurador. Por exemplo, ao depurar aplicativos que contêm um grande número de módulos e arquivos PDB.

  • A pesquisa está ativada nas janelas Inspeção, Automáticos e Locais .

Desenvolvimento de desktop Windows com C++

  • Estes assistentes C++ ATL/MFC não estão mais disponíveis:

    • Assistente de componentes ATL COM+ 1.0
    • Assistente do componente ATL Ative Server Pages
    • Assistente de provedor ATL OLE DB
    • Assistente de página de propriedades ATL
    • Assistente para consumidor ATL OLE DB
    • MFC ODBC Consumidor
    • Classe MFC do controle ActiveX
    • MFC classe de Type Lib.

    O código de exemplo para essas tecnologias é arquivado no Microsoft Learn e no repositório VCSamples GitHub.

  • O Windows 8.1 Software Development Kit (SDK) não está mais disponível no instalador do Visual Studio. Recomendamos que você atualize seus projetos C++ para o SDK do Windows mais recente. Se você tiver uma dependência rígida do 8.1, poderá baixá-lo do arquivo do SDK do Windows.

  • A segmentação do Windows XP não estará mais disponível para o conjunto de ferramentas C++ mais recente. A segmentação do XP com bibliotecas & do compilador MSVC de nível VS 2017 ainda é suportada e pode ser instalada por meio de "Componentes individuais".

  • Nossa documentação desencoraja ativamente o uso de módulos de mesclagem para implantação do Visual C++ Runtime. Estamos dando o passo extra nesta versão de marcar nossos MSMs como obsoletos. Considere migrar sua implantação central VCRuntime de MSMs para o pacote redistribuível.

Desenvolvimento mobile com C++ (Android e iOS)

A experiência C++ Android agora tem como padrão Android SDK 25 e Android NDK 16b.

Conjunto de ferramentas da plataforma Clang/C2

O componente experimental Clang/C2 foi removido. Use o conjunto de ferramentas MSVC para conformidade total com os 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 unidades

O modelo de projeto de teste C++ gerenciado não está mais disponível. Você pode continuar usando a estrutura de teste 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 Managed C# Test Project.