Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Visual Studio 2017 traz muitas atualizações e correções para o ambiente C++. Corrigimos mais de 250 bugs e reportamos problemas no compilador e nas ferramentas. Muitos foram enviados pelos clientes através das opções Comunicar um problema e Fornecer uma sugestão em Enviar comentários. Obrigado por relatar bugs!
Para obter mais informações sobre o que há de novo em todo o Visual Studio, consulte O que há de novo no Visual Studio 2017. Para obter informações sobre as novidades do C++ no Visual Studio 2019, consulte Novidades do C++ no Visual Studio 2019. Para obter informações sobre as novidades do C++ no Visual Studio 2015 e versões anteriores, consulte Visual C++ What's New 2003 a 2015.
Compilador C++ do Visual Studio 2017
Melhorias de conformidade com C++
Atualizamos o compilador C++ e a biblioteca padrão nesta versão com suporte aprimorado para recursos C++11 e C++14. Ele também inclui suporte preliminar para certos recursos que devem estar no padrão C++17. Para obter informações detalhadas, consulte Aprimoramentos de conformidade C++ no Visual Studio 2017.
Visual Studio 2017 versão 15.5
O compilador suporta cerca de 75% dos recursos que são novos no C++17, incluindo ligaçõ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 Aprimoramentos de conformidade C++ no Visual Studio 2017
Visual Studio 2017 versão 15.7
O conjunto de ferramentas do compilador MSVC no Visual Studio versão 15.7 agora está em conformidade com o padrão C++. Para obter mais informações, consulte Anunciando: MSVC está em conformidade com o padrão C++ e conformidade dalinguagem Microsoft C/C++.
Visual Studio 2017 versão 15.8
O /experimental:preprocessor switch do compilador habilita o novo pré-processador experimental MSVC que eventualmente estará em conformidade com todos os padrões C e C++ aplicáveis. Para obter mais informações, consulte Visão geral do novo pré-processador MSVC.
Novas opções do compilador
/permissive-: Habilite todas as opções de compilador de conformidade com padrões rigorosos e desative 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 em duas fases. Para obter mais informações, consulte Aprimoramentos de conformidade C++ no Visual Studio./diagnostics: Permite a exibição do erro de diagnóstico ou local de aviso de três maneiras diferentes: apenas o número da linha, o número da linha e a coluna, ou o número da linha e a coluna, com um cursor sob a linha de código ofensiva./debug:fastlink: Habilite tempos de link incrementais até 30% mais rápidos (em comparação com o Visual Studio 2015) não copiando todas as informações de depuração para o arquivo PDB. Em vez disso, o arquivo PDB aponta para as informações de depuração para o objeto e os arquivos de biblioteca usados para criar o executável. Consulte Ciclo de compilação C++ mais rápido no VS "15" com/Debug:fastlinke Recomendações para acelerar compilações C++ no Visual Studio.O Visual Studio 2017 permite usar
/sdlcom/awaito . Removemos a/RTClimitação com Co-rotinas.
Visual Studio 2017 versão 15.3
/std:c++14e/std:c++latest: Essas opções do compilador permitem que você opte por versões específicas da linguagem de programação ISO C++ em um projeto. A maioria dos novos recursos padrão preliminares são protegidos pela/std:c++latestopção./std:c++17habilita o conjunto de recursos C++17 implementados pelo compilador. Esta opção desativa o suporte ao compilador e à biblioteca padrão para recursos após o C++17: aqueles que são alterados ou novos em versões posteriores do Rascunho de Trabalho e atualizações com defeito do Padrão C++. Para habilitar esses recursos, use/std:c++latest.
Codegen, segurança, diagnóstico e controle de versão
Esta versão traz várias melhorias em otimização, geração de código, versionamento de conjunto de ferramentas e diagnóstico. Algumas melhorias notáveis incluem:
- Melhoria na geração de loops de código: Suporte para vetorização automática de divisão de inteiros constantes, melhor identificação de padrões memset.
- Segurança de código aprimorada: Emissão aprimorada de diagnósticos de compilador de saturação de buffer e
/guard:cfagora protege instruções de switch que geram tabelas de salto. - Controle de versão: O valor do _MSC_VER de macro interno do pré-processador agora está sendo atualizado monotonicamente a cada atualização do conjunto de ferramentas do 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 compilação relacionadas têm um novo local e uma nova estrutura de diretórios em sua máquina de desenvolvimento. O novo layout permite instalações lado a lado de várias versões do compilador. Para obter mais informações, consulte Layout das ferramentas do compilador no Visual Studio 2017.
- Diagnóstico melhorado: A janela de saída agora mostra a coluna onde ocorre um erro. Para obter mais informações, consulte Melhorias no diagnóstico do compilador C++ no VS "15" Preview 5.
- Ao usar co-rotinas, o rendimento experimental da palavra-chave (disponível na
/awaitopção) foi removido. Seu código deve ser atualizado para ser usadoco_yield. Para obter mais informações, consulteyielda palavra-chave a ser incorporadaco_yieldno VS 2017.
Visual Studio 2017 versão 15.3
Melhorias no diagnóstico no compilador. Para obter mais informações, consulte Aprimoramentos de diagnóstico no Visual Studio 2017 15.3.0.
Visual Studio 2017 versão 15.5
O desempenho do tempo de execução do Visual C++ continua a melhorar por meio de uma melhor qualidade de código gerada. Agora você pode simplesmente recompilar seu código e seu aplicativo é executado mais rapidamente. Algumas das otimizações do compilador são 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 SSA. Outras otimizações do compilador são melhorias na funcionalidade existente, tais como: heurística vetorizadora para expressões condicionais, melhores otimizações de loop e codegen float min/max. O linker tem uma implementação nova e mais rápida /OPT:ICF , que pode resultar em até 9% acelerações de tempo de link, e há outras correções de perf na vinculação incremental. Para obter mais informações, consulte /OPT (Otimizações) e /INCREMENTAL (Link incrementalmente).
O compilador Microsoft C++ suporta AVX-512 da Intel. Possui instruções de comprimento vetorial que trazem novas funções no AVX-512 para registradores largos de 128 bits e 256 bits.
A /Zc:noexceptTypes- opção pode ser usada para reverter para a versão C++14 do noexcept ao usar o modo C++17 em geral. Esta opção permite que você atualize seu código-fonte para estar em conformidade com C++17 sem ter que reescrever todo o seu throw() código ao mesmo tempo. Para obter mais informações, consulte Remoção de especificação de exceção dinâmica e noexcept.
Visual Studio 2017 versão 15.7
- Novo switch de compilador /Qspectre para ajudar a mitigar contra ataques de canal lateral de execução especulativa. Para obter mais informações, consulte Mitigações do Spectre no MSVC.
- Novo aviso de diagnóstico para mitigação do Spectre. Para obter mais informações, consulte Diagnóstico do Spectre no Visual Studio 2017 Versão 15.7 Preview 4.
- Um novo valor para /Zc,
/Zc:__cplusplus, permite a geração de relatórios corretos do suporte ao padrão C++. Por exemplo, quando o switch é definido e o compilador está no/std:c++17modo, o valor se expande para201703L. Para obter mais informações, consulte MSVC agora relata corretamente __cplusplus.
Biblioteca padrão C++
Melhorias na correção
Visual Studio 2017 RTM (versão 15.0)
- Pequenas
basic_string_ITERATOR_DEBUG_LEVEL != 0melhorias no diagnóstico. Quando uma verificação IDL é tropeçada em máquinas de cordas, ela agora relata o comportamento específico que causou a viagem. Por exemplo, em vez de "string iterator not dereferencable" você obtém "cannot unreference string iterator because is out of range (por exemplo, an end iterator)". - Corrigido o operador de
std::promiseatribuição de movimento, que anteriormente podia fazer com que o código fosse bloqueado para sempre. - Corrigidos erros do compilador com a
atomic<T*>conversão implícita paraT*. -
pointer_traits<Ptr>agora detetaPtr::rebind<U>corretamente . - Corrigido um qualificador ausente
constno operador demove_iteratorsubtração. - Corrigido codegen incorreto silencioso para alocadores definidos pelo usuário com estado solicitando
propagate_on_container_copy_assignmentepropagate_on_container_move_assignment. -
atomic<T>agora toleraoperator&()sobrecarregado . - Diagnóstico do compilador ligeiramente melhorado para chamadas incorretas
bind().
Há mais aprimoramentos de biblioteca padrão no Visual Studio 2017 RTM. Para obter uma lista completa, consulte a entrada C++ Team Blog Standard Library Fixes In VS 2017 RTM.
Visual Studio 2017 versão 15.3
- Os contêineres de biblioteca padrão agora prendem o seu
max_size()emnumeric_limits<difference_type>::max()vez domax()desize_type. Essa alteração garante que o resultado dedistance()em iteradores desse contêiner seja representável no tipo de retorno dedistance(). - Corrigida a especialização
auto_ptr<void>em falta. - Os
for_each_n()algoritmos ,generate_n(), esearch_n()falharam anteriormente ao compilar se o argumento length não fosse um tipo integral. Eles agora tentam converter comprimentos não integrais para os iteradores.difference_type -
normal_distribution<float>não emite mais avisos dentro da biblioteca padrão sobre o estreitamento de duplo para flutuante. - Corrigidas algumas
basic_stringoperações que usavamnposem vez de ao verificar o estouro demax_size()tamanho máximo. -
condition_variable::wait_for(lock, relative_time, predicate)esperaria todo o tempo relativo se houvesse um velório espúrio. Agora espera apenas por um único intervalo do tempo relativo. -
future::get()agora invalida ofuture, como a norma exige. -
iterator_traits<void *>costumava ser um erro difícil porque tentou formarvoid&, agora torna-se uma estrutura vazia para permitir o uso deiterator_traitsem condições SFINAE "é iterador". - Alguns avisos relatados por Clang
-Wsystem-headersforam corrigidos. - Também corrigido "especificação de exceção na declaração não corresponde à declaração anterior" relatado por Clang
-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 trocaram suas funções de hash ou predicados quando os próprios contêineres foram trocados. Agora sim.
- Muitas operações de troca de contêiner agora estão marcadas
noexcept(pois nossa biblioteca padrão nunca pretende lançar uma exceção ao detetar a condição de comportamento indefinido do alocador nãopropagate_on_container_swapigual). - Muitas
vector<bool>operações estão agora marcadasnoexcept. - A biblioteca padrão agora impõe o alocador
value_typecorrespondente (no modo C++17) com uma escotilha de escape de desativação. - Corrigidas algumas condições em que a inserção automática de intervalos embaralharia
basic_stringo conteúdo das cadeias de caracteres. (Nota: a inserção automática em vetores ainda é proibida pela Norma.) -
basic_string::shrink_to_fit()já não é afetadapropagate_on_container_swappelo alocador . -
std::decayAgora lida com tipos de função abomináveis, ou seja, tipos de função que são qualificados para CV, Ref ou ambos. - As alterações incluem diretivas para usar a sensibilidade adequada a maiúsculas e minúsculas e barras para a frente, melhorando a portabilidade.
- Aviso fixo C4061 "enumerador 'enumerador' no switch de enum 'enumeração' não é explicitamente manipulado por um rótulo de caso." Esse aviso está desativado por padrão e foi corrigido como uma exceção à política geral da biblioteca padrão para avisos. (A biblioteca padrão é
/W4limpa, mas não tenta ser/Walllimpa. Muitos avisos off-by-default são excepcionalmente barulhentos e não se destinam a ser usados regularmente.) - Verificações de depuração melhoradas
std::list. Os iteradores de lista agora verificamoperator->()elist::unique()agora marcam os iteradores como inválidos. - Metaprogramação fixa do alocador de usos em
tuple.
Visual Studio 2017 versão 15.5
-
std::partitionagora chama os tempos de predicadoNem vez deN + 1tempos, como o padrão exige. - As tentativas de evitar estáticas mágicas na versão 15.3 são reparadas na versão 15.5.
-
std::atomic<T>não precisaTmais ser construível por padrão. - Os algoritmos de heap que levam tempo logarítmico se comportam de forma diferente quando a depuração do iterador está habilitada. Eles não fazem mais uma afirmação de tempo linear de que a entrada é de fato um monte.
-
__declspec(allocator)agora está protegido apenas para C1XX, para evitar avisos do Clang, que não entende esse declspec. -
basic_string::nposagora está disponível como uma constante de tempo de compilação. -
std::allocatorno modo C++17 agora lida corretamente com a alocação de tipos sobrealinhados, ou seja, tipos cujo alinhamento é maior que , a menos que desabilitadomax_align_tpelo/Zc:alignedNew-. Por exemplo, vetores de objetos com alinhamento de 16 ou 32 bytes agora estão alinhados corretamente para instruções SSE e AVX.
Melhorias de conformidade
- Nós adicionamos <qualquer>, <string_view>,
apply(),make_from_tuple(). - Adicionado <opcional>, <
shared_ptr::weak_typevariante> e <cstdalign>. - Habilitado C++14 em , e , e
minmax(initializer_list), emin_element(),max_element()eminmax_element().max(initializer_list)min(initializer_list)constexpr
Para obter mais informações, consulte Conformidade da linguagem Microsoft C/C++.
Visual Studio 2017 versão 15.3
- Vários outros recursos do C++17 foram implementados. Para obter mais informações, consulte Tabela de conformidade de linguagem Microsoft C++.
- Implementado P0602R0 "variante e opcional deve propagar a trivialidade de cópia/movimento".
- A biblioteca padrão agora tolera oficialmente que o RTTI dinâmico seja desativado através da opção /GR- . Ambos e
dynamic_pointer_cast()rethrow_if_nested()inerentemente exigemdynamic_cast, então a biblioteca padrão agora os marca como=deleteem/GR-. - Mesmo quando o RTTI dinâmico é desativado via
/GR-, o "RTTI estático" na forma de ainda está disponível e alimenta vários componentes detypeid(SomeType)biblioteca padrão. A biblioteca padrão agora também suporta a desativação desse recurso, via/D_HAS_STATIC_RTTI=0. Esta bandeira também desativastd::any, astarget()funções etarget_type()membro destd::function, e aget_deleter()função de membro amigo destd::shared_ptrestd::weak_ptr. - A biblioteca padrão agora usa C++14
constexprincondicionalmente, em vez de macros definidas condicionalmente. - A biblioteca padrão agora usa modelos de alias internamente.
- A biblioteca padrão agora usa
nullptrinternamente, em vez denullptr_t{}. (O uso interno de NULL é erradicado. O uso interno de 0-as-null está sendo limpo gradualmente.) - A biblioteca padrão agora usa
std::move()internamente, em vez de usar estilisticamente indevidamentestd::forward(). - Alterado
static_assert(false, "message")para#error message. Essa alteração melhora o diagnóstico do compilador porque#errorinterrompe imediatamente a compilação. - A biblioteca padrão não marca mais funções como
__declspec(dllimport). A tecnologia de ligação moderna já não o exige. - SFINAE extraído para argumentos de modelo padrão, o que reduziu a desordem em comparação com tipos de argumento de retorno e tipos de argumento de função.
- As verificações de depuração aleatórias <> agora usam o maquinário usual da biblioteca padrão, em vez da função
_Rng_abort()interna, que chamavafputs()parastderr. A implementação desta função é mantida para compatibilidade binária. Vamos removê-lo na próxima versão binária-incompatível da biblioteca padrão.
Visual Studio 2017 versão 15.5
- Vários recursos de biblioteca padrão foram adicionados, preteridos ou removidos de acordo com o padrão C++17. Para obter mais informações, consulte Aprimoramentos de conformidade C++ no Visual Studio.
- Suporte experimental para os seguintes algoritmos paralelos:
all_ofany_offor_eachfor_each_nnone_ofreducereplacereplace_ifsort
- As assinaturas para os seguintes algoritmos paralelos são adicionadas, mas não paralelizadas no momento. A criação de perfil não mostrou nenhum benefício em paralelizar algoritmos que apenas movem ou permutam elementos:
copycopy_nfillfill_nmovereversereverse_copyrotaterotate_copyswap_ranges
Visual Studio 2017 versão 15.6
<memory_resource>- Fundamentos da Biblioteca V1
- Excluindo
polymorphic_allocatoratribuição - Melhorando a dedução do argumento do modelo de classe
Visual Studio 2017 versão 15.7
- O suporte para algoritmos paralelos não é mais experimental
- Uma nova implementação de
<filesystem> - Conversões elementares de cadeia de caracteres (parcial)
std::launder()std::bytehypot(x,y,z)- Evitar a deterioração desnecessária
- Funções matemáticas especiais
constexpr char_traits- Guias de dedução para a biblioteca padrão
Para obter mais informações, consulte Conformidade da linguagem Microsoft C/C++.
Correções de desempenho e taxa de transferência
- Sobrecargas feitas
basic_string::find(char)só ligartraits::finduma vez. Anteriormente, ele foi implementado como uma pesquisa de cadeia de caracteres geral para 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 mesmas. - Removido o acoplamento de controle no
basic_string, que era difícil para o otimizador do compilador analisar. Para todas as cadeias curtas, a chamadareserveainda tem um custo diferente de zero para não fazer nada. -
std::vectorfoi revisado para correção e desempenho: o aliasing durante as operações de inserção e colocação agora é tratado corretamente conforme exigido pela Norma, a garantia de exceção forte agora é fornecida quando exigida pela Norma viamove_if_noexcept()e outra lógica, e inserir e inserir menos operações de elementos. - A biblioteca padrão C++ agora evita a desreferenciação de ponteiros extravagantes nulos.
- Desempenho melhorado
weak_ptr::lock(). - Para aumentar a taxa de transferência do compilador, os cabeçalhos de biblioteca padrão C++ agora evitam incluir declarações para intrínsecas desnecessárias do compilador.
- Melhorou o desempenho e
std::wstringmoveu construtores em mais destd::stringtrês vezes.
Visual Studio 2017 versão 15.3
- Trabalhei em torno de interações com
noexcepto , o que impediu a inclusão dastd::atomicimplementação em funções que usam o Tratamento de Exceções Estruturadas (SEH). - Mudou a função interna
_Deallocate()da biblioteca padrão para otimizar em código menor, permitindo que ela seja inserida em mais lugares. - Alterado
std::try_lock()para usar expansão de pacote em vez de recursão. - Melhorou o
std::lock()algoritmo de prevenção de deadlock para usarlock()operações em vez de girar emtry_lock()todas as fechaduras. - Habilitada a otimização do valor de retorno nomeado no
system_category::message(). -
conjunctionedisjunctionagora instanciarN + 1tipos, em vez de2N + 2tipos. -
std::functionnão instancia mais o maquinário de suporte ao alocador para cada tipo que pode ser chamado apagado, melhorando a taxa de transferência e reduzindo o tamanho do .obj em programas que passam muitos lambdas distintos parastd::function. -
allocator_traits<std::allocator>contém operações manualmente embutidasstd::allocator, reduzindo o tamanho do código no código que interage apenas comstd::allocatorthroughallocator_traits(ou seja, na maioria dos códigos). - A interface do alocador mínimo C++11 agora é manipulada pela biblioteca padrão chamando
allocator_traitsdiretamente, em vez de envolver o alocador em uma classe_Wrap_allocinterna. Essa alteração reduz o tamanho do código gerado para o suporte ao alocador, melhora a capacidade do otimizador de raciocinar sobre contêineres de biblioteca padrão em alguns casos e fornece uma melhor experiência de depuração (como agora você vê seu tipo de alocador, em vez de_Wrap_alloc<your_allocator_type>no depurador). - Removida a metaprogramação para personalizados
allocator::reference, que os alocadores não têm permissão para personalizar. (Os alocadores podem fazer com que os contêineres usem ponteiros sofisticados, mas não referências extravagantes.) - O front-end do compilador foi ensinado a desembrulhar iteradores de depuração em loops baseados em intervalo, melhorando o desempenho de compilações de depuração.
- O
basic_stringcaminho de redução interno parashrink_to_fit()ereserve()não está mais no caminho de realocar operações, reduzindo o tamanho do código para todos os membros mutantes. - O
basic_stringcaminho de crescimento interno não está mais no caminho dashrink_to_fit(). - As
basic_stringoperações mutantes agora são consideradas na não alocação de caminho rápido e na alocação de funções de caminho lento, tornando mais provável que o caso comum de não realocação seja inserido nos chamadores. - As
basic_stringoperações mutantes agora constroem buffers realocados no estado preferencial em vez de redimensionar no local. 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 recém-alocado. Ele não é mais movido duas vezes no caso de realocação, primeiro para o buffer recém-alocado e depois para baixo. - As operações que chamam a biblioteca padrão C na cadeia de caracteres> agora armazenam <em cache o endereço para remover a
errnointeração repetida com TLS. - Simplificação da
is_pointerimplementação. - Concluída a alteração da expressão SFINAE baseada em função para
structevoid_t-based. - Os algoritmos de biblioteca padrão agora evitam o pós-incremento de iteradores.
- Avisos de truncamento corrigidos ao usar alocadores de 32 bits em sistemas de 64 bits.
-
std::vectora atribuição de movimentação agora é mais eficiente no caso de alocador não igual não-POCMA, reutilizando o buffer quando possível.
Visual Studio 2017 versão 15.5
-
basic_string<char16_t>agora envolve o mesmomemcmp,memcpye otimizações semelhantes quebasic_string<wchar_t>envolve. - Uma limitação do otimizador que impedia que ponteiros de função fossem embutidos, exposta pelo nosso trabalho "evitar copiar funções" no Visual Studio 2015 Atualização 3, foi contornada, restaurando o desempenho do
lower_bound(iter, iter, function pointer). - A sobrecarga da verificação de ordem da depuração do iterador de entradas para
includes,set_difference,set_symmetric_difference, eset_unionfoi reduzida desempacotando iteradores antes de verificar a ordem. -
std::inplace_mergeagora ignora elementos que já estão em posição. - Construir
std::random_devicenão constrói mais e depois destrói umstd::string. -
std::equalestd::partitiontinha um passo de otimização jump-threading que salva uma comparação de iterador. - Quando
std::reverseé passado ponteiros para trivialmente copiávelT, ele agora despacha para uma implementação vetorizada manuscrita. -
std::fill,std::equalestd::lexicographical_compareforam ensinados a despachar paramemsetememcmpparastd::byteegsl::byte(e outras classes de enums e enum char-like). Desdestd::copydespachos usandois_trivially_copyable, não precisou de alterações. - A biblioteca padrão não contém mais destruidores de chaves vazias cujo único comportamento era tornar os tipos não trivialmente destrutíveis.
Outras bibliotecas
Suporte a bibliotecas de código aberto
Vcpkg é uma ferramenta de linha de comando de código aberto que simplifica muito o processo de aquisição e criação de bibliotecas estáticas C++ de código aberto e DLLS no Visual Studio. Para obter mais informações, consulte vcpkg.
CPPRest SDK 2.9.0
Visual Studio 2017 versão 15.5
O CPPRestSDK, uma API da Web multiplataforma para C++, é atualizado para a versão 2.9.0. Para obter mais informações, consulte CppRestSDK 2.9.0 está disponível no GitHub.
ATL
Visual Studio 2017 versão 15.5
- Mais um conjunto de correções de conformidade de pesquisa de nome
- Os construtores de movimentação existentes e os operadores de atribuição de movimentação agora estão marcados corretamente como não lançadores
- Unsuppress aviso válido C4640 sobre thread safe init de estática local em atlstr.h
- A inicialização thread-safe de estáticas locais foi automaticamente desativada no conjunto de ferramentas do XP ao usar ATL para criar uma DLL. Agora não é. Você pode adicionar
/Zc:threadSafeInit-as configurações do Project se não quiser uma inicialização segura para threads.
Tempo de execução do Visual C++
- Novo cabeçalho "cfguard.h" para símbolos do Control Flow Guard.
Visual Studio 2017 C++ IDE
- O desempenho da alteração de configuração agora é melhor para projetos nativos do C++ e muito melhor para projetos C++/CLI. Quando uma configuração de solução é ativada pela primeira vez, ela é mais rápida e todas as ativações posteriores dessa configuração de solução são quase instantâneas.
Visual Studio 2017 versão 15.3
- Vários assistentes de projeto e código foram reescritos no estilo de diálogo de assinatura.
- Adicionar classe agora inicia o assistente Adicionar classe diretamente. Todos os outros itens que estavam anteriormente aqui agora estão disponíveis em Adicionar > Novo Item.
- Os projetos do Win32 agora estão na categoria Área de Trabalho do Windows na caixa de diálogo Novo projeto .
- Os modelos Console do Windows e Aplicativo da Área de Trabalho agora criam os projetos sem exibir um assistente. Há um novo Assistente de Área de Trabalho do Windows na mesma categoria que exibe as mesmas opções do antigo assistente de Aplicativo de Console do Win32 .
Visual Studio 2017 versão 15.5
Várias operações C++ que usam o mecanismo IntelliSense para refatoração e navegação de código são executadas muito mais rapidamente. Os números a seguir são baseados na solução Visual Studio Chromium com 3500 projetos:
| Característica | Melhoria de desempenho |
|---|---|
| Mudar o nome | 5,3x |
| Alterar assinatura | 4,5x |
| Encontrar todas as referências | 4,7x |
O C++ agora suporta Ctrl+Click Go To Definition, facilitando a navegação do mouse para definições. O Visualizador de Estrutura do pacote Ferramentas Elétricas de Produtividade agora também está incluído no produto por padrão.
IntelliSense
O novo mecanismo de banco de dados baseado em SQLite agora está sendo usado por padrão. O novo mecanismo acelera as operações do banco de dados, como Ir para definição e Localizar todas as referências. Melhora significativamente o tempo de análise inicial da solução. A configuração foi movida para Ferramentas > Opções > Editor > de Texto C/C++ > Avançado. (Foi anteriormente sob ... C/C++ > Experimental.)
Melhoramos o desempenho do IntelliSense em projetos e arquivos que não usam cabeçalhos pré-compilados - um cabeçalho pré-compilado automático é criado para cabeçalhos no arquivo atual.
Adicionamos filtragem de erros e ajuda para erros do IntelliSense na lista de erros. Clicar na coluna de erro agora permite filtrar. Além disso, clicar nos erros específicos ou pressionar F1 inicia uma pesquisa on-line para a mensagem de erro.
Adicionada a capacidade de filtrar itens da Lista de Membros por tipo.
Adicionado um novo recurso experimental do IntelliSense Preditivo que fornece filtragem contextualmente consciente do que aparece na Lista de Membros. Para obter mais informações, consulte C++ IntelliSense Improvements - Predictive IntelliSense & Filtering.
Encontrar todas as referências (Shift+F12) agora ajuda você a se locomover facilmente, mesmo em bases de código complexas. Ele fornece agrupamento avançado, filtragem, classificação, pesquisa dentro dos resultados e (para alguns idiomas) colorização, para que você possa obter uma compreensão clara de suas referências. Para C++, a nova interface do usuário inclui informações sobre se estamos lendo ou gravando em uma variável.
O recurso Dot-to-Arrow IntelliSense passou de experimental para avançado e agora está habilitado por padrão. O editor apresenta Expandir Escopos e Expandir Precedência movidos de experimental para avançado.
Os recursos experimentais de refatoração Change Signature e Extract Function agora estão disponíveis por padrão.
Adicionado um recurso experimental 'Carregamento de projeto mais rápido' para projetos C++. Da próxima vez que você abrir um projeto C++, ele carregará mais rápido e, no tempo seguinte, carregará muito mais rápido!
Alguns desses recursos são comuns a outras linguagens e alguns são específicos do C++. Para obter mais informações sobre esses novos recursos, consulte Anunciando o Visual Studio "15" Preview 5.
Visual Studio 2017 versão 15.7
- Suporte adicionado para ClangFormat. Para obter mais informações, consulte Suporte a ClangFormat no Visual Studio 2017.
Projetos não-MSBuild com Open Folder
O Visual Studio 2017 apresenta o recurso Abrir pasta . Ele permite codificar, compilar e depurar em uma pasta que contém código-fonte sem a necessidade de criar soluções ou projetos. Agora é mais simples começar a usar o Visual Studio, mesmo que seu projeto não seja um projeto baseado em MSBuild. O Open Folder dá-lhe acesso a poderosas capacidades de compreensão, edição, criação e depuração de código. Eles são os mesmos que o Visual Studio já fornece para projetos do MSBuild. Para obter mais informações, consulte Abrir projetos de pasta para C++.
- Melhorias na experiência de Abrir pasta. Você pode personalizar a experiência através destes .json arquivos:
- CppProperties.json personalizar o IntelliSense e a experiência de navegação.
- Tasks.json personalizar as etapas de compilação.
- Launch.json personalizar a experiência de depuração.
Visual Studio 2017 versão 15.3
- Suporte melhorado para compiladores alternativos e ambientes de construção como MinGW e Cygwin. Para obter mais informações, consulte Usando MinGW e Cygwin com Visual C++ e Open Folder.
- Adicionado suporte para definir variáveis de ambiente globais e específicas de configuração em CppProperties.json e CMakeSettings.json. Essas variáveis de ambiente podem ser consumidas por configurações de depuração definidas em launch.vs.json e tarefas em tasks.vs.json. Para obter mais informações, consulte Personalizando seu ambiente com o Visual C++ e Open Folder.
- Suporte melhorado para o gerador Ninja do CMake, incluindo a capacidade de visar facilmente plataformas de 64 bits.
Suporte CMake via Open Folder
Visual Studio 2017 introduz suporte para usar projetos CMake sem converter em arquivos de projeto MSBuild (.vcxproj). Para obter mais informações, consulte Projetos CMake no Visual Studio. Abrir projetos CMake com Open Folder configura automaticamente o ambiente para edição, criação e depuração em C++.
C++ IntelliSense funciona sem a necessidade de criar um arquivo CppProperties.json na pasta raiz. Adicionamos uma nova lista suspensa para permitir que os usuários alternem facilmente entre as configurações fornecidas pelo CMake e CppProperties.json arquivos.
A configuração adicional é suportada através de um arquivo CMakeSettings.json que fica na mesma pasta que o arquivo CMakeLists.txt.
Visual Studio 2017 versão 15.3
- Suporte adicionado para o gerador CMake Ninja.
Visual Studio 2017 versão 15.4
- Suporte adicionado para importar caches CMake existentes.
Visual Studio 2017 versão 15.5
- Suporte adicionado para CMake 3.11, análise de código em projetos CMake, visualização Destinos no Gerenciador de Soluções, opções para geração de cache e compilação de arquivo único. Para obter mais informações, consulte Suporte ao CMake no Visual Studio e Projetos CMake no Visual Studio.
Desenvolvimento de desktop Windows
Agora fornecemos uma experiência de instalação mais granular para instalar a carga de trabalho C++ original. Adicionámos componentes selecionáveis que lhe permitem instalar apenas as ferramentas de que necessita. Os tamanhos de instalação indicados para os componentes listados na interface do usuário do instalador estão incorretos e subestimam o tamanho total.
Para criar com êxito projetos Win32 na carga de trabalho da área de trabalho C++, você deve instalar um conjunto de ferramentas e um SDK do Windows. Instale os componentes recomendados (selecionados) VC++ 2017 v141 toolset (x86, x64) e Windows 10 SDK (10.0.nnnnn) para garantir que funciona. Se as ferramentas necessárias não forem instaladas, os projetos não serão criados com êxito e o assistente para de responder.
Visual Studio 2017 versão 15.5
As ferramentas de compilação do Visual C++ (anteriormente disponíveis como um produto autônomo) agora estão incluídas como uma carga de trabalho no instalador do Visual Studio. Essa carga de trabalho instala apenas as ferramentas necessárias para criar projetos C++ sem instalar o IDE do Visual Studio. Os conjuntos de ferramentas v140 e v141 estão incluídos. O conjunto de ferramentas v141 contém as melhorias mais recentes no Visual Studio 2017 versão 15.5. Para obter mais informações, consulte Visual Studio Build Tools agora incluem os conjuntos de ferramentas VS2017 e VS2015 MSVC.
Desenvolvimento Linux com C++
A extensão popular Visual C++ for Linux Development agora faz parte do Visual Studio. Esta instalação fornece tudo o que você precisa para desenvolver e depurar aplicativos C++ em execução em um ambiente Linux.
Visual Studio 2017 versão 15.2
Foram feitas melhorias no compartilhamento de código entre plataformas e na visualização de tipos. Para obter mais informações, consulte Aprimoramentos do Linux C++ para compartilhamento de código entre plataformas e visualização de tipos.
Visual Studio 2017 versão 15.5
- A carga de trabalho do Linux adicionou suporte para rsync como uma alternativa ao sftp para sincronizar arquivos com máquinas Linux remotas .
- É adicionado suporte para compilação cruzada direcionada a microcontroladores ARM. Para habilitá-lo na instalação, escolha o desenvolvimento Linux com carga de trabalho C++ e selecione a opção para Embedded e IoT Development. Esta opção adiciona as ferramentas de compilação cruzada ARM GCC e Make à sua instalação. Para obter mais informações, consulte ARM GCC Cross Compilation in Visual Studio.
- Suporte adicionado para CMake. Agora você pode trabalhar em sua base de código CMake existente sem ter que convertê-lo em um projeto do Visual Studio. Para obter mais informações, consulte Configurar um projeto Linux CMake.
- Suporte adicionado para executar tarefas remotas. Esse recurso permite que você execute qualquer comando em um sistema remoto definido no Gerenciador de conexões do Visual Studio. As tarefas remotas também fornecem a capacidade de copiar arquivos para o sistema remoto. Para obter mais informações, consulte Configurar um projeto Linux CMake.
Visual Studio 2017 versão 15.7
- Várias melhorias em cenários de carga de trabalho Linux. Para obter mais informações, consulte Linux C++ Workload improvements to the Project System, Linux Console Window, rsync e Attach to Process.
- IntelliSense para cabeçalhos em conexões Linux remotas. Para obter mais informações, consulte IntelliSense para cabeçalhos Linux remotos e Configurar um projeto Linux CMake.
Desenvolvimento de jogos com C++
Use todo o poder do C++ para criar jogos profissionais com DirectX ou Cocos2d.
Desenvolvimento mobile com C++ para Android e iOS
Agora você pode criar e depurar aplicativos móveis usando o Visual Studio que podem ser direcionados para Android e iOS.
Aplicativos universais do Windows
O C++ vem como um componente opcional para a carga de trabalho do Aplicativo Universal do Windows. Atualmente, você deve atualizar projetos C++ manualmente. Você pode abrir um projeto da Plataforma Universal do Windows direcionado para v140 no Visual Studio 2017. No entanto, você precisa selecionar o conjunto de ferramentas da plataforma v141 nas páginas de propriedades do projeto se não tiver o Visual Studio 2015 instalado.
Novas opções para C++ na Plataforma Universal do Windows (UWP)
Agora você tem novas opções para escrever e empacotar aplicativos C++ para a Plataforma Universal do Windows e a Windows Store: A infraestrutura do Desktop Bridge permite empacotar seu aplicativo de área de trabalho existente ou objeto COM para implantação por meio da Windows Store. Ou, para implantação através de seus canais existentes via sideloading. Os novos recursos do Windows 10 permitem que você adicione a funcionalidade UWP ao seu aplicativo da área de trabalho de várias maneiras. Para obter mais informações, consulte Desktop Bridge.
Visual Studio 2017 versão 15.5
Um modelo de projeto do Windows Application Packaging Project é adicionado, o que simplifica muito o empacotamento de aplicativos da área de trabalho com o Desktop Bridge. Está disponível em Arquivo | Novo | Projeto | Instalado | Visual C++ | Plataforma Universal do Windows. Para obter mais informações, consulte Empacotar um aplicativo usando o Visual Studio (Desktop Bridge).
Ao escrever um novo código, agora você pode usar C++/WinRT, uma projeção de linguagem C++ padrão para o Tempo de Execução do Windows implementada somente em arquivos de cabeçalho. Ele permite que você consuma e crie APIs do Tempo de Execução do Windows usando qualquer compilador C++ em conformidade com os padrões. O C++/WinRT foi projetado para fornecer aos desenvolvedores de C++ acesso de primeira classe à API moderna do Windows. Para obter mais informações, consulte C++/WinRT.
A partir da compilação 17025 do Windows SDK Insider Preview, o C++/WinRT está incluído no SDK do Windows. Para obter mais informações, consulte C++/WinRT agora está incluído o SDK do Windows.
O conjunto de ferramentas da plataforma Clang/C2
O conjunto de ferramentas Clang/C2 fornecido com o Visual Studio 2017 agora oferece suporte ao /bigobj switch, que é crucial para a criação de grandes projetos. Ele também inclui várias correções de bugs importantes, tanto no front-end do compilador quanto no back-end.
Análise de código C++
Os verificadores principais do C++ para aplicar as diretrizes principais do C++ agora são distribuídos com o Visual Studio. Habilite os verificadores na página Extensões de Análise de Código nas páginas de propriedades do projeto. As extensões são então incluídas quando você executa a análise de código. Para obter mais informações, consulte Usando os verificadores de diretrizes principais do C++.
Visual Studio 2017 versão 15.3
- Suporte adicionado para regras relacionadas ao gerenciamento de recursos.
Visual Studio 2017 versão 15.5
As novas verificações das Diretrizes Principais do C++ abrangem a correção inteligente do ponteiro, o uso correto de inicializadores globais e a sinalização de usos de construções como
gotoe moldes incorretos.Alguns números de aviso que você pode encontrar na versão 15.3 não estão mais disponíveis na versão 15.5. Estas advertências foram substituídas por controlos mais específicos.
Visual Studio 2017 versão 15.6
- Suporte adicionado para análise de arquivo único e melhorias no desempenho de tempo de execução da análise. Para obter mais informações, consulte Aprimoramentos de análise estática C++ para Visual Studio 2017 15.6 Preview 2
Visual Studio 2017 versão 15.7
- Suporte adicionado para
/analyze:ruleset, que permite especificar as regras de análise de código a serem executadas. - Suporte adicionado para mais regras das Diretrizes Principais do C++. Para obter mais informações, consulte Usando os verificadores de diretrizes principais do C++.
Teste de unidade no Visual Studio 2017
Visual Studio 2017 versão 15.5
O Google Test Adapter e o Boost.Test Adapter agora estão disponíveis como componentes do Desktop Development com carga de trabalho C++. Eles são integrados ao Test Explorer. O suporte CTest é adicionado para projetos CMake (usando Open Folder), embora a integração completa com o Test Explorer ainda não esteja disponível. Para obter mais informações, consulte Escrevendo testes de unidade para C/C++.
Visual Studio 2017 versão 15.6
- Suporte adicionado para
Boost.Testsuporte de biblioteca dinâmica. - Um modelo de
Boost.Testitem agora está disponível no IDE.
Para obter mais informações, consulte Boost.Test Teste de unidade: suporte a biblioteca dinâmica e Novo modelo de item.
Visual Studio 2017 versão 15.7
Suporte a CodeLens adicionado para projetos de teste de unidade C++. Para obter mais informações, consulte Anunciando o CodeLens para teste de unidade C++.
Diagnóstico de gráficos do Visual Studio
Ferramentas de diagnóstico de gráficos do Visual Studio: você pode usá-las para registrar e analisar problemas de renderização e desempenho em aplicativos Direct3D. Utilize-os em aplicações executadas localmente no seu PC Windows, num emulador de dispositivo Windows ou num PC ou dispositivo remoto.
Entrada e saída para sombreadores de vértice e geometria: A capacidade de visualizar a entrada e saída de sombreadores de vértice e sombreadores de geometria tem sido um dos recursos mais solicitados. Agora é suportado nas ferramentas. Selecione o estágio VS ou GS na visualização Estágios de pipeline para começar a inspecionar sua entrada e saída na tabela abaixo.
Pesquisar e filtrar na tabela de objetos: Fornece uma maneira rápida e fácil de encontrar os recursos que você está procurando.
Histórico de recursos: Essa nova exibição fornece uma maneira simplificada de ver todo o histórico de modificações de um recurso como ele foi usado durante a renderização de um quadro capturado. Para invocar o histórico de qualquer recurso, clique no ícone de relógio ao lado de qualquer hiperlink de recurso.
Ele exibe a nova janela da ferramenta Histórico de Recursos , preenchida com o histórico de alterações do recurso.
Você pode capturar quadros com a captura de pilha de chamadas completa habilitada. Isso permite deduzir rapidamente o contexto de cada evento de alteração e inspecioná-lo em seu projeto do Visual Studio. Defina a opção de captura de pilha completa na caixa de diálogo Opções de ferramentas > do Visual Studio em Diagnóstico de gráficos.
Estatísticas da API: Veja um resumo de alto nível do uso da API em seu quadro. É útil para descobrir chamadas que você pode não perceber que está fazendo ou chamadas que está fazendo com muita frequência. Esta janela está disponível por meio de Exibir > estatísticas da API no Visual Studio Graphics Analyzer.
Estatísticas de memória: Veja a quantidade de memória que o driver aloca para os recursos que você cria no quadro. Esta janela está disponível através de Exibir > estatísticas de memória no Visual Studio Graphics Analyzer. Para copiar dados para um arquivo CSV para visualização em uma planilha, clique com o botão direito do mouse e escolha Copiar tudo.
Validação de quadros: A nova lista de erros e avisos fornece uma maneira fácil de navegar na lista de eventos com base em possíveis problemas detetados pela camada de depuração do Direct3D. Clique em Exibir > validação de quadro no Visual Studio Graphics Analyzer para abrir a janela. Em seguida, clique em Executar validação para iniciar a análise. Pode levar vários minutos para ser concluído, dependendo da complexidade do quadro.
Análise de quadros para D3D12: Use a Análise de Quadros para analisar o desempenho de chamadas de desenho com experimentos "hipotéticos" direcionados. Alterne para a guia Análise de quadros e execute a análise para exibir o relatório.
Melhorias no uso da GPU: Os rastreamentos abertos podem ser obtidos por meio do criador de perfil de uso da GPU do Visual Studio com GPUView ou a ferramenta Windows Performance Analyzer (WPA) para uma análise mais detalhada. Se você tiver o Kit de Ferramentas de Desempenho do Windows instalado, há dois hiperlinks: um para WPA e outro para GPUView, no canto inferior direito da visão geral da sessão.
Os rastreamentos que você abre no GPUView por meio deste link suportam o zoom e o movimento panorâmico sincronizados da linha do tempo VS e GPUView. Uma caixa de seleção no VS controla se a sincronização está habilitada ou não.