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