Novidades do C++ no Visual Studio 2022

O Visual Studio 2022 traz muitas atualizações e correções para o compilador e as ferramentas do Microsoft C++. O IDE do Visual Studio também oferece melhorias significativas no desempenho e na produtividade e agora é executado nativamente como um aplicativo de 64 bits.

O que há de novo para C++ no Visual Studio versão 17.9

Em resumo, alguns dos novos recursos são:

  • #include diagnósticos, que fornece uma análise detalhada de suas #include diretrizes. Ative esse recurso clicando com o botão direito do mouse em um #include e escolhendo #include diretivas>Ativar #include diagnóstico de diretiva. Acima de cada #include um está o número de vezes que seu código faz referência a esse #include arquivo. Clique no link de referência para navegar até onde seu código usa algo desse arquivo de cabeçalho. Para exibir o tempo de compilação de suas #include diretrizes, execute o Build Insights navegando até Build>Run Build Insights on Solution>Build.

    Screenshot of #include diagnostics

    Acima do # include há um link **reference** e um número de referências a este arquivo # include (neste caso 1). O tempo de compilação também é listado (neste caso, menos de 1/2 segundo).

  • Visualização de layout de memória, que mostra como a memória é organizada para suas classes, estruturas e uniões. Passe o mouse sobre um tipo e escolha o link Layout de memória nas Informações Rápidas para abrir uma janela dedicada exibindo o layout de memória do tipo selecionado. Passar o mouse sobre tipos de dados individuais dentro dessa janela fornece informações detalhadas sobre seu tamanho e deslocamento dentro do tipo.

    Screenshot of the memory layout window

    A janela de layout de memória mostra o conteúdo da classe Snake. Ele mostra os deslocamentos de memória dos vários campos da classe, como classes de pontos para a localização da cabeça e do corpo, a pontuação e assim por diante.

  • Agora você pode especificar seu próprio executável CMake personalizado. Esse recurso é útil se você quiser usar uma versão específica do CMake que não é fornecida com o Visual Studio. Navegue até Opções de Ferramentas>e selecione CMake>Geral. Selecione Ativar executável CMake personalizado e especifique o caminho do diretório do executável CMake.

    Screenshot of the CMake options dialog

    A caixa de diálogo de opções do CMake com a opção "Ativar executável CMake personalizado" e o campo "Diretório executável do CMake" realçados.

  • IntelliSense aprimorado para projetos do Unreal Engine.
  • Suporte aprimorado ao C++23: std::format eformattablestd::span , range_format, format_kinde set_debug_format() como parte de P2286R8 Intervalos de formatação<mdspan> por P0009R18 e alterações de redação subsequentes que foram aplicadas ao padrão C++23. Além disso, format() pode formatar ponteiros por P2510R3.

Para obter um resumo das atualizações de back-end do C++, consulte Atualizações de back-end do MSVC desde o Visual Studio 2022 versão 17.3.

Para obter um resumo dos novos recursos no IDE do Visual Studio 17.9, consulte Notas de versão do Visual Studio 2022 versão 17.9.

Novidades sobre o C++ na versão 17.8 do Visual Studio

Em resumo, alguns dos novos recursos são:

  • Diagnóstico estruturado do C++ na janela Saída e uma nova janela de detalhes do problema que fornece mais informações sobre o erro. Para obter mais informações, consulte Saída estruturada SARIF e Janela de detalhes do problema.
  • Um recurso que permite visualizar o tamanho e o alinhamento de suas classes, structs, uniões, tipos base ou enumerações antes mesmo de o código ser compilado. Passe o mouse sobre o identificador e uma Informação Rápida exibirá as informações de tamanho e alinhamento.
  • Um recurso que sugere quando marcar funções membro const porque elas não modificam o estado do objeto. Passe o mouse sobre uma função membro e clique no ícone de lâmpada para marcar a função como const.
  • Agora, o Visual Studio solicita que você marque as funções globais como estáticas por meio de um ícone de chave de fenda que é exibido pelo nome da função. Clique no ícone da chave de fenda para marcar a função como estática.
  • As diretivas de #include não utilizadas são esmaecidas no editor. Você pode passar o mouse sobre uma inclusão esmaecida e usar o menu de lâmpada para remover essa inclusão ou todas as inclusões não utilizadas. Você também pode adicionar #include diretivas para entidades que são incluídas indiretamente por meio de outros cabeçalhos. Para obter mais informações, consulte Limpar inclusões do C/C++ no Visual Studio.
  • Mais suporte ao Unreal Engine:
    • O Adaptador de Teste do Unreal Engine permite que você descubra, execute, gerencie e depure seus testes do Unreal Engine sem sair do IDE do Visual Studio.
    • Com os trechos de código do Unreal Engine, você pode encontrar constructos comuns do Unreal Engine como trechos na lista de membros.
    • O Build Insights agora está integrado ao Visual Studio 2022 e funciona com projetos MSBuild e CMake usando o MSVC. Agora você pode ver informações adicionais sobre a compilação de uma função, como quanto tempo levou para compilar e o número de ForceInlines.
  • O suporte remoto de teste de unidade do Linux agora permite executar seus testes CTest e GTest em seus computadores Linux remotos a partir do Gerenciador de Testes do Visual Studio, assim como seus testes locais.

Para obter um resumo abrangente das novas funcionalidades do C++ no Visual Studio 17.8, confira Novidades para desenvolvedores de C++ no Visual Studio 2022 17.8.

Para obter um resumo dos novos recursos do IDE do Visual Studio 17.8, consulte Notas sobre a versão 17.8 do Visual Studio 2022.

Novidades sobre o C++ na versão 17.7 do Visual Studio

Para obter um resumo dos novos recursos de C++ no Visual Studio 17.7, consulte as Novidades para desenvolvedores de C++ no Visual Studio 2022 17.7.

Em resumo, alguns dos novos recursos são:

  • Sessões de depuração mais rápidas e tempos de carregamento de projeto mais rápidos
  • Visualização passo a passo da expansão da macro
  • Download com um clique para o Subsistema do Windows para Linux (WSL)
  • Suporte aprimorado para comentários Doxygen
  • C++ Build Insights para o desenvolvimento de jogos
  • Adicionado /std:clatest para o compilador C.
  • Melhorias no projeto Unreal Engine, como IntelliSense mais rápido e colorização de sintaxe, capacidade de localizar todas as referências do Unreal Engine Blueprint e muito mais.

Para obter um resumo dos novos recursos do C++ específicos para o desenvolvimento de jogos, consulte Liberando o Poder do Visual Studio 2022 para o Desenvolvimento de Jogos em C++

Para obter um resumo dos novos recursos do IDE do Visual Studio 17.7, consulte Notas sobre a versão 17.7 do Visual Studio 2022.

Novidades sobre o C++ na versão 17.6 do Visual Studio

Para obter um resumo dos novos recursos de C++ no Visual Studio 17.6, consulte as Novidades para desenvolvedores de C++ no Visual Studio 2022 17.6.

Resumidamente, alguns dos novos recursos são: depuração de script CMake, suporte interno para High Level Shading Language (HLSL), um visualizador Unreal Engine Log, suporte inicial para C++20 em projetos C++/CLI, VCPKG agora é adicionado por padrão e alguns recursos de biblioteca padrão C++23 para intervalos. Para ver uma lista completa dos novos recursos adicionados à biblioteca padrão, consulte o log de alterações de STL.

Para obter um resumo dos novos recursos do IDE do Visual Studio 17.6, consulte Notas sobre a versão 17.6 do Visual Studio 2022.

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

Para obter um resumo dos novos recursos do C++ no Visual Studio na versão 17.5, consulte O que há de novo para desenvolvedores de C++ no Visual Studio 2022 17.5. Para obter um resumo dos novos recursos e correções de bugs na versão 17.5 do IDE do Visual Studio, consulte Visual Studio 2022 versão 17.5 Notas sobre a versão.

  • std::move, std::forward, std::move_if_noexcept e std::forward_like agora não produzem chamadas de função no código gerado, mesmo no modo de depuração. Essa alteração evita conversões nomeadas que causam sobrecarga desnecessária em builds de depuração. /permissive- (ou uma opção que implica isso, como /std:c++20 ou std:c++latest) é necessária.

  • Adicionado [[msvc::intrinsic]] para dar suporte ao item acima. Você pode aplicar esse atributo a funções não recursivas que consistem em uma única conversão e que recebem apenas um parâmetro.

  • Adicionado suporte para o Console do Linux no Terminal Integrado, que permite a E/S do terminal.

  • Adicionado suporte experimental inicial para primitivos atômicos C11 (<stdatomic.h>). Você pode habilitar esse recurso experimental com a opção /experimental:c11atomics no modo /std:c11 ou posterior.

  • Adicionado um novo conjunto de verificações experimentais de alta confiança ao Verificador de Tempo de Vida para redução de ruído.

  • Um novo recurso de visualização, Explorador de Arquivos Remoto, permite exibir o diretório de arquivos em seus computadores remotos no VS e carregar e baixar arquivos nele.

  • Alteração do controle de versão dos executáveis do CMake fornecidos com o Visual Studio para corresponder às versões do Kitware.

  • Adicionado suporte para Recarga Dinâmica ao modelo projeto do CMake.

  • Ir para Definição para C++ agora usa um indicador mais sutil da operação demorando mais tempo, substituindo a caixa de diálogo modal de versões anteriores.

  • A distribuição de um experimento foi iniciada fornecendo resultados mais inteligentes na lista de membros e preenchimento automático do C++. Essa funcionalidade era conhecida anteriormente como IntelliSense Preditivo, mas agora usa um novo método de apresentação.

  • Agora enviamos um conjunto de ferramentas nativo do Arm64 Clang com nossa carga de trabalho LLVM, permitindo a compilação nativa em computadores Arm64.

  • A localização foi adicionada à Extensão de Inspeção de Imagem (essa extensão está disponível no Marketplace e não é agrupada por meio do Instalador do Visual Studio).

  • Adicionado suporte para abrir uma janela do Terminal no Contêiner do Desenvolvedor em execução no momento.

  • Fez várias melhorias na expansão da macro do IntelliSense. Notavelmente, habilitamos a expansão recursiva em mais contextos e adicionamos opções ao pop-up para copiar a expansão para a área de transferência ou expandir a macro embutida.

  • O monitoramento simultâneo agora tem suporte no Monitor Serial. O monitoramento simultâneo permite monitorar várias portas ao mesmo tempo lado a lado. Pressione o botão de adição para abrir outro Monitor Serial e começar.

  • Agora você pode exibir propriedades de classes base modificadas em um ativo do Unreal Blueprint sem sair do Visual Studio. Clique duas vezes em uma referência de Blueprint para uma classe ou propriedade C++ para abrir o Inspetor de Ativos da UE no Visual Studio.

  • Execução habilitada de DevContainers em um computador Linux remoto.

  • Seleção habilitada de vários destinos a serem compilados na exibição Destinos do CMake.

  • Suporte adicionado para CMakePresets.json versão 5. Consulte a documentação do CMake para obter informações sobre novos recursos.

  • Habilitado o Gerenciador de Testes para criar e testar vários destinos do CMake em paralelo.

  • A opção "Abrir contêiner no terminal" foi adicionada aos Contêineres de Desenvolvimento.

  • Recursos da biblioteca padrão implementados:

    • P2508R1basic_format_string, format_string, wformat_string
    • P2322R6ranges::fold_left, ranges::fold_right e assim por diante.
    • P2321R2views::zip (não inclui zip_transform, adjacent e adjacent_transform)

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

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio na versão 17.4, consulte Visual Studio 2022 versão 17.4 Notas sobre a versão e O que há de novo para desenvolvedores de C++ no Visual Studio 2022 17.4.

  • Mensagens de erro do compilador aprimoradas para fornecer informações mais corretas e úteis, especialmente para conceitos.

  • A opção /experimental:log<directory> do MSVC experimental foi adicionada para gerar diagnósticos SARIF estruturados no diretório especificado.

  • Suporte adicionado para atributos C23 ao IntelliSense e progresso contínuo no suporte a módulos C++20.

  • Melhor desempenho de indexação ao abrir uma nova solução. Projetos grandes podem ver um aprimoramento de 20 a 35% em relação à versão 17.3.

  • Otimização de valor retornado nomeado aprimorada (NRVO):

    • O NRVO está habilitado para casos que envolvem tratamento de exceções ou loops.
    • O NRVO será habilitado mesmo em /Od se o usuário passar a opção /Zc:nrvo ou /std:c++20 posterior ou /permissive-.
    • Agora você pode desabilitar o NRVO com a opção /Zc:nrvo-.
  • Atualização da versão do LLVM fornecida com o Visual Studio para 15.0.1. Para obter mais informações sobre o que está disponível, consulte as notas sobre a versão de LLVM e Clang.

  • Suporte adicionado ao Visual Studio para artefatos vcpkg com projetos do CMake. Para projetos que incluem um manifesto vcpkg, o ambiente é ativado automaticamente no projeto aberto. Saiba mais sobre esse recurso na postagem no blog Ativação do ambiente vcpkg no Visual Studio.

  • Agora você pode usar Contêineres de Desenvolvimento para seus projetos C++. Saiba mais sobre esse recurso em nossa postagem no blog Contêineres de Desenvolvimento para C++.

  • O IntelliSense agora respeita a ordem dos cabeçalhos pré-incluídos quando um deles é um PCH. Anteriormente, quando um PCH era usado por meio de /Yu e incluído à força via /FI, o IntelliSense sempre o processava primeiro, antes de qualquer outro cabeçalho incluído por meio de /FI. Esse comportamento não correspondeu ao comportamento do build. Com essa alteração, os cabeçalhos /FI são processados na ordem em que são especificados.

  • Foram removidos prefixos internos de nomes CTest no Gerenciador de Testes.

  • Atualizada a versão do CMake fornecida com o Visual Studio para a versão 3.24.1. Para obter detalhes sobre o que está disponível, consulte as notas sobre a versão do CMake.

  • Atualização do SDK do Android:

    • Os scripts Ant foram removidos, para que os usuários não vejam mais modelos baseados em Ant na caixa de diálogo Novo Projeto. Para obter ajuda para migrar modelos Ant para modelos Gradle, consulte Migrando builds do Apache Ant
    • Suporte adicionado para compilação com NDK 23 e 24
    • Componente NDK atualizado para o LTS versão 23
  • Adição de implementações vetorizadas de ranges::min_element(), ranges::max_element() e ranges::minmax_element()

  • Continuamos acompanhando os desenvolvimentos mais recentes na padronização do C++. O suporte para esses recursos do C++23 está disponível incluindo /std:c++latest nas opções do compilador:

    • P2302R4ranges::contains, ranges::contains_subrange

    • P2499R0string_view O construtor de intervalo deve ser explicit

    • P0849R8auto(x): decay-copy Na linguagem

      (A parte do compilador ainda não foi implementada. A parte da biblioteca foi implementada no modo C++20 quando o suporte a Intervalos foi implementado inicialmente.)

    • P0881R7<stacktrace>

    • P2301R1 Adicionar A pmr Alias para std::stacktrace

    • P1328R1constexpr type_info::operator==()

    • P2440R1ranges::iota, ranges::shift_left, ranges::shift_right

    • P2441R2views::join_with

  • Adicionada uma opção "Navegação após Criar Declaração/Definição" para permitir que você escolha o comportamento de navegação do recurso Criar Declaração/Definição. Você pode selecionar entre espiar (o padrão) ou abrir o documento ou sem navegação.

  • Agora, os builds Arm64 do Visual Studio agrupam versões Arm64 do CMake e Ninja.

  • Adicionado suporte para predefinições do CMake versão 4. Para obter detalhes sobre o que está disponível, consulte as notas sobre a versão do CMake.

  • As conexões remotas do sistema usando o Gerenciador de Conexões agora dão suporte a ProxyJump SSH. ProxyJump é usado para acessar um host SSH por meio de outro host SSH (por exemplo, para acessar um host por trás de um firewall).

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

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio na versão 17.3, consulte Notas sobre a versão 17.3 do Visual Studio 2022 e Melhorias no C++.

  • A cadeia de ferramentas Arm64EC não está mais marcada como experimental e está pronta para uso em produção.

  • O Terminal do Visual Studio agora pode ser usado como um cliente SSH com suas conexões SSH armazenadas. Com as Ferramentas do C++ para Linux instaladas, abra a janela da ferramenta Terminal. A lista suspensa Terminal é preenchida com suas conexões armazenadas. Quando você seleciona uma conexão, uma nova janela do Terminal é aberta dentro do Visual Studio que mostra um pseudo-terminal em seu sistema remoto. Há suporte para caracteres de controle, cores e reconhecimento posicional do cursor.

  • Agora, o Visual Studio pode adicionar modelos de classe do Unreal Engine para seus projetos da UE. Para experimentar esse recurso, verifique se o Suporte do IDE para Unreal Engine está selecionado na carga de trabalho Desenvolvimento de jogos com C++ no Instalador do Visual Studio. Quando estiver trabalhando em um projeto UE, clique com o botão direito do mouse no projeto ou em uma pasta/filtro e selecione Adicionar>Classe UE.

  • Vá para Definição agora lembra a assinatura anterior e navega de acordo quando uma correspondência melhor não está disponível (por exemplo, depois de alterar manualmente a assinatura de um dos pares). A capacidade de resposta do Ir Para Todos foi aprimorada. Anteriormente, os resultados apareciam depois que você parava de digitar. Na nova experiência, os resultados são mostrados conforme você digita.

  • Em contextos que exigem a conclusão do tipo enum (por exemplo, atribuições a variáveis enum, rótulos de caso, tipo de retorno enum e assim por diante), a lista de preenchimento automático agora é filtrada apenas para os enumeradores correspondentes e constructos relacionados.

  • Adicionado suporte ao PackageReference NuGet para projetos MSBuild do C++/CLI direcionados ao .NET Core. Essa alteração foi feita para desbloquear as bases de código mistas de serem capazes de adotar o .NET Core. Esse suporte não funciona para outros tipos de projeto C++ ou tipos de projeto C++ direcionando o .NET Framework. Não há planos para estender o suporte a PackageReference para outros cenários do C++. A equipe está trabalhando em experiências separadas envolvendo vcpkg para cenários não MSBuild e para adicionar maior funcionalidade.

  • Foi adicionada uma janela do Monitor Serial para desenvolvimento inserido, disponível por meio de Depurar>Windows>Monitor Serial.

  • Melhor indexação de C++ em ~66% em comparação com a versão 17.2.

  • Atualizada a versão do CMake fornecida com o Visual Studio para a versão 3.23. Confira as notas sobre a versão do CMake 3.23 para obter detalhes do que está disponível.

  • Atualizou as versões das ferramentas LLVM enviadas com o Visual Studio para v14. Para obter detalhes sobre o que está disponível, consulte as notas sobre a versão do LLVM e do Clang.

  • Atualizado o Conjunto de Ferramentas do Dev 16.11 C++ lado a lado para a versão 14.29.30145.00. A versão mais recente do Conjunto de Ferramentas do C++ do Dev 16.11 contém correções de bugs importantes, incluindo a correção de todos os relatórios de defeito restantes do C++20. Para obter mais informações sobre correções de bugs, incluindo relatórios de defeito do C++20 no Dev 16.11, consulte Notas sobre a versão do Visual Studio 2019 versão 16.11.14.

  • Feitas várias melhorias na experiência do editor de módulos C++. Estamos continuamente trabalhando para melhorar a qualidade da experiência, mas incentivamos você a experimentá-las na versão 17.3. Relatar os problemas restantes por meio da Developer Community.

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

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 17.2, confira as Notas sobre a versão do Visual Studio 2022 versão 17.1.

  • Suporte ao compilador adicionado para o recurso deduzindo this do C++23, disponível sob a opção /std:c++latest.

  • Adicionado suporte do IntelliSense para recursos do C++23 deduzindo this e if consteval.

  • Adicionado suporte à dica de tipo e ao nome de parâmetro embutido, alternado pressionando Alt+F1 ou tocando duas vezes em Ctrl. Esse comportamento pode ser personalizado em Ferramentas > Opções > Editores de texto > C/C++ > IntelliSense.

  • Adicionado suporte experimental para módulos C++20 em projetos do CMake. No momento, esse suporte só está disponível com o gerador do Visual Studio (MSBuild).

  • Na versão 17.1, apresentamos exibições de registro periférico e RTOS para desenvolvedores inseridos. Continuamos a melhorar as funcionalidades desses modos de exibição com melhorias de usabilidade no 17.2:

    • A janela da ferramenta RTOS agora está ocultada por padrão. Isso impede que uma janela de ferramenta seja exibida com mensagens de erro não relevantes quando você não está usando um RTOS.
    • Ao clicar duas vezes em um objeto RTOS na janela de ferramentas, uma inspeção é adicionada para o objeto.
    • Ao selecionar os valores de início e final para o ponteiro de pilha na janela de ferramentas do RTOS, ele é aberto na janela de memória.
    • Adicionado reconhecimento de thread para destinos de dispositivo à janela de pilha de chamadas.
    • Agora, os usuários podem selecionar um ícone de pino ao lado de periféricos, registros ou campos para fixá-los na parte superior da Exibição Periférica.
  • Adicionadas implementações dos relatórios de defeito do C++20 restantes (também conhecidos como backports). Todos os recursos do C++20 agora estão disponíveis na opção /std:c++20. Para obter mais informações sobre os backports implementados, confira o projeto Relatórios de defeitos C++20 no repositório GitHub da Microsoft/STL e a postagem no blog STL do MSVC completa /std:c++20.

  • Adicionamos vários recursos da Biblioteca C++23, disponíveis na opção /std:c++latest. Para obter mais informações sobre os novos recursos, confira a caixa Log de alterações de repositório STL.

  • Melhor desempenho da indexação inicial do C++ em até 20%, dependendo da profundidade do grafo de inclusão.

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

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio versão 17.1, confira as Notas sobre a versão do Visual Studio 2022 versão 17.1.

  • Um novo modelo Configurar predefinição foi adicionado para configurar e compilar projetos do CMake em um sistema macOS remoto com CMakePresets.json. Você também pode iniciar destinos do CMake em um sistema macOS remoto e, em seguida, depurar remotamente no depurador do Visual Studio apoiado pelo GDB ou LLDB.
  • Você agora pode depurar despejos de depuração em um sistema macOS remoto a partir do Visual Studio com LLDB ou GDB.
  • As versões de Clang e LLVM enviadas com o Visual Studio foram atualizadas para a v13.
  • A integração do CMake do Visual Studio só está ativa quando um CMakeLists.txt é identificado na raiz do workspace aberto. Se um CMakeLists.txt for identificado em outro nível do workspace, você será solicitado a ativar a integração do CMake do Visual Studio com uma notificação.
  • Novas exibições que habilitam você a inspecionar e interagir com registros periféricos em microcontroladores e objetos de sistemas operacionais em tempo real (RTOS), disponíveis em Depurar>Windows>Registros Inseridos
  • Adicionada uma nova exibição de thread para projetos RTOS, disponível por meio de Depurar>Windows>Objetos RTOS. Para obter mais informações, consulte Desenvolvimento de software com inserção no Visual Studio.

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

Para obter um resumo dos novos recursos e correções de bugs no Visual Studio, confira as Notas sobre a versão do Visual Studio 2022 versão 17.0.

  • O IDE do Visual Studio, devenv.exe, agora é um aplicativo nativo de 64 bits.

  • O conjunto de ferramentas MSVC agora usa o padrão de hash de origem SHA-256 em registros de depuração. Anteriormente, o conjunto de ferramentas usava MD5 para hash de origem por padrão.

  • As ferramentas de build v143 agora estão disponíveis por meio do instalador do Visual Studio e nas ferramentas de build autônomas.

Recarga Dinâmica para C++ nativo

  • A Recarga Dinâmica para C++ possibilita fazer muitos tipos de edições de código no aplicativo em execução e aplicá-las sem precisar pausar a execução com algo como um ponto de interrupção.

No Visual Studio 2022, ao iniciar seu aplicativo no depurador, você pode usar o botão Recarga Dinâmica para modificar seu aplicativo enquanto ele ainda estiver em execução. Essa experiência é alimentada por Edição e Continuação nativas. Para obter mais informações sobre as edições compatíveis, confira Editar e continuar (C++).

  • Recarga Dinâmica permite projetos CMake e Open Folder.

Suporte ao WSL2

  • Agora você pode compilar e depurar nativamente no WSL2 sem estabelecer uma conexão SSH. Há suporte para projetos CMake multiplataforma e projetos Linux baseados em MSBuild.

Suporte aprimorado do CMake

  • Atualizada a versão do CMake fornecida com o Visual Studio para a versão 3.21. Para obter mais informações sobre o que está disponível nesta versão, confira as Notas sobre a versão do CMake 3.21.

  • As Páginas de Visão Geral do CMake estão atualizadas para dar suporte ao CMakePresets.json.

  • Agora você pode configurar e compilar seus projetos do CMake com o CMake 3.21 e CMakePresets.json v3.

  • O Visual Studio agora permite a opção buildPresets.targets em CMakePresets.json. Essa opção permite criar um subconjunto de destinos no seu projeto CMake.

  • O menu Projeto em projetos do CMake foi simplificado e expõe as opções "Excluir Cache e Reconfigurar" e "Exibir Cache".

  • Implementou a opção do compilador /scanDependencies para listar dependências de módulo C++20 para projetos do CMake, conforme descrito em P1689R5. É um passo em direção ao suporte para a criação de projetos baseados em módulos com o CMake e estamos trabalhando para concluir esse suporte em versões posteriores.

Aprimoramentos da Biblioteca Padrão

Melhorias de Select Standard Library (STL) são destacadas aqui. Para obter uma lista abrangente de novas funcionalidades, alterações, correções de bugs e melhorias de desempenho, confira o Log de alterações da equipe do STL.

  • Foram adicionados visualizadores de depuração para melhorar a forma como os seguintes tipos são exibidos: source_location, bind_front(), u8string (e seus iteradores), default_sentinel_t, unreachable_sentinel_t, ranges::empty_view, ranges::single_view, ranges::iota_view (e seu iterator/sentinela), ranges::ref_view, thread, thread::id, jthread e filesystem::path
  • [[nodiscard]] adicionado à família stoi() de funções em <string> e a várias funções em <locale>, como as funções de membro collate, has_facet(), e as famílias isalnum() e tolower().
  • P0980R1 feito std::stringconstexpr no VS 2019 16.10. Agora há suporte para Clang.
  • P1004R2 feito std::vectorconstexprno VS 2019 16.10. Agora há suporte para Clang.

Recursos do C++23 em destaque

  • is_scoped_enum adicionado a P1048R1, uma nova característica para a biblioteca C++ Standard, que detecta se um tipo é uma enumeração com escopo.
  • P1132R7out_ptr(), inout_ptr()
  • P1679R3contains() para basic_string e basic_string_view
  • P1682R3to_underlying() para enumerações
  • P2162R2 permite herdar de std::variant
  • P2166R1 proíbe construir basic_string e basic_string_view de nullptr. Essa alteração é uma alteração interruptiva do código. O código que anteriormente tinha um comportamento indefinido no runtime agora é rejeitado com erros do compilador.
  • P2186R2 removeu o suporte à coleta de lixo. Essa alteração remove declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. Anteriormente, essas funções não tinham efeito.

Melhorias de desempenho em destaque

  • <format> agora detecta quando está gravando em um back_insert_iterator para um basic_string ou um vector, e faz uma chamada mais rápida para insert() no end() do contêiner.
  • Melhoramos o desempenho de std::find() e std::count() para vector<bool> 19x e 26x (vezes, não por cento).
  • Melhoramos o desempenho de std::count() para vector<bool>
  • std::byte agora tem o mesmo desempenho que unsigned char em reverse() e variant::swap()

Suporte a Clang e LLVM

  • As ferramentas de LLVM enviadas com o Visual Studio estão atualizadas para a LLVM 12. Para obter mais informações, confira the Notas sobre a versão do LLVM.

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

  • Agora você pode depurar processos em execução em um sistema remoto do Visual Studio usando o LLDB.

C++ AMP preterido

  • Cabeçalhos C++ AMP foram preteridos. Incluindo <amp.h> em um projeto C++ gera erros de build. Para silenciar os erros, defina _SILENCE_AMP_DEPRECATION_WARNINGS. Para obter mais informações, confira nossos links de depreciação do AMP.

Aprimoramentos do IntelliSense

  • Fizemos melhorias no IntelliSense C++ ao fornecer realce de navegação e sintaxe para tipos de módulos importados e unidades de cabeçalho. O IntelliSense é uma área ativa de investimento para nós. Ajude-nos a melhorar: compartilhe seus comentários sobre a Developer Community usando Ajuda>Enviar feedback.

  • Melhoramos o desempenho do IntelliSense do C++ otimizando o uso de cabeçalho armazenado em cache e o acesso ao banco de dados de símbolos, fornecendo tempos de carga aprimorados para entrar no seu código.

  • O Linter de Código do IntelliSense para C++ agora está ativado por padrão, fornecendo sugestões instantâneas conforme o tipo e sugestões de correção para defeitos de código comuns.

  • O C++ IntelliSense para projetos do CMake agora funciona ao usar uma predefinição com um nome de exibição.

Atualizações de carga de trabalho do C++

  • Atualizado para LTS NDK r21 na carga de trabalho Desenvolvimento móvel do C++.

  • O Desenvolvimento de jogos com carga de trabalho C++ agora instala o Mecanismo Unreal mais recente com suporte para Visual Studio 2022.

Melhorias na análise de código

  • A análise de código agora impõe que os valores retornados de funções anotadas com _Check_return_ ou _Must_inspect_result_ que precisa ser verificados.

  • A detecção de desreferência de ponteiro nulo foi aprimorada em nossas ferramentas de análise de código.

  • Suporte adicionado para gsl::not_null para análise de código.

  • Suporte para Libfuzzer na opção do compilador /fsanitize=fuzzer.

Notas sobre a versão para versões mais antigas

Notas sobre a versão para versões mais antigas do C++ também estão disponíveis. Para saber mais sobre novidades de C++ no Visual Studio 2019, confira Novidades de C++ no Visual Studio 2019. Para saber mais sobre novidades de C++ no Visual Studio 2017, confira Novidades de C++ no Visual Studio 2017. Para obter informações sobre o que há de novo em versões anteriores, consulte Visual C++ What's New 2003 até 2015.

Problemas conhecidos

C++ IntelliSense

Para obter mais informações sobre outros problemas abertos e soluções alternativas disponíveis para C++ no Visual Studio 2022, confira a lista de problemas do Developer Community C++.

Comentários e sugestões

Adoraríamos ouvir o que você tem para nos dizer! Você pode relatar um problema ou sugerir um recurso usando o ícone Enviar Comentários no canto superior direito do instalador ou do IDE do Visual Studio ou em Help>Enviar feedback. Você pode acompanhar seus problemas usando a Visual Studio Developer Community, em que você adiciona comentários ou encontra soluções. Você também pode obter ajuda gratuita com a instalação por meio de nosso suporte via chat ao vivo.

Blogs

Aproveite os insights e as recomendações disponíveis no site Blogs para Desenvolvedores da Microsoft para se manter atualizado de novas versões. Os blogs incluem postagens aprofundadas sobre uma grande variedade de recursos. O Blog da Equipe do C++ e o Blog do Visual Studio são de interesse específico.