Alterações significativas no Visual C++

Este documento lista as alterações mais recentes na Visual C++ 2010.

Compilador do Visual C++

  • O palavra-chave auto tem um significado de padrão de novo. Como uso o significado do antigo é raro, a maioria dos aplicativos não serão afetados por essa alteração.

  • O novo static_assert palavra-chave é introduzida, o que causará um conflito de nome se já houver um identificador com esse nome no seu código.

  • Suporte para a nova notação lambda exclui o suporte para codificação de um GUID sem aspas em um IDL uuid atributo.

  • O .NET Framework 4 apresenta o conceito de corrompido estado exceções, que são as exceções que deixam um processo em um estado corrompido irrecuperável. Por padrão, você não pode capturar uma exceção de estado corrompido, mesmo com o /EHa opção de compilador que captura todas as outras exceções.

    Para explicitamente capturar uma exceção de estado corrompido, use __try-__except instruções. Ou então, aplicar o [HandledProcessCorruptedStateExceptions] atributo para ativar uma função capturar exceções de estado corrompido.

    Essa alteração afeta principalmente os programadores de sistema que podem ter para capturar uma exceção de estado corrompido. As exceções de oito são STATUS_ACCESS_VIOLATION, STATUS_STACK_OVERFLOW, EXCEPTION_ILLEGAL_INSTRUCTION, EXCEPTION_IN_PAGE_ERROR, EXCEPTION_INVALID_DISPOSITION, EXCEPTION_NONCONTINUABLE_EXCEPTION, EXCEPTION_PRIV_INSTRUCTION, STATUS_UNWIND_CONSOLIDATE. Para obter mais informações sobre estas exceções, consulte a GetExceptionCode macro.

  • O revisado /GS opção de compilador protege contra saturações de buffer mais abrangente do que nas versões anteriores. Essa versão pode inserir as verificações de segurança adicionais na pilha que pode diminuir o desempenho. Usar o novo __declspec(safebuffers) palavra-chave para instruir o compilador para não inserir segurança verifica a existência de uma função específica.

  • Se você compilar com ambos os /GL (otimização de programa total) e /clr (Common Language Runtime Compilation) opções do compilador, o /GL opção é ignorada. Essa alteração foi feita porque a combinação das opções de compilador fornecido pouco benefício. Como resultado da alteração, o desempenho da compilação é aprimorado.

  • Por padrão, o suporte para trigraphs está desativado no Visual C++ 2010 . Use o /Zc:trigraphs opção de compilador para habilitar o suporte de trigraphs. Um trigraph consiste em dois pontos de interrogação consecutivos ("??") seguido por um terceiro caractere exclusivo. O compilador substitui um trigraph com um caractere de pontuação correspondente. Por exemplo, o compilador substitui o "??=" trigraph com '#' caractere. Use trigraphs em arquivos de código-fonte C, usam um conjunto de caracteres que não contenha convenientes representações gráficas de alguns caracteres de pontuação.

  • O vinculador não suporta a otimização de Windows 98. O OPÇ (otimizações) opção produz um erro de tempo de compilação se você especificar /OPT:WIN98 ou /OPT:NOWIN98.

  • As opções do compilador padrão são especificadas pelo RuntimeLibrary e DebugInformationFormat propriedades de compilação do sistema foram alteradas. Por padrão, essas propriedades são especificadas em projetos criados de compilação Visual C++ versões 7.0, por meio de 10.0. Se você migrar um projeto que foi criado por Visual C++ 6.0, considere a possibilidade de especificar um valor para essas propriedades.

    Em Visual C++ 2010, RuntimeLibrary = MultiThreaded (/ MD) e DebugInformationFormat = ProgramDatabase (/Zi). Em Visual C++ 9.0, RuntimeLibrary = MultiThreaded (/ MT) e DebugInformationFormat = desativado.

Common Language Runtime (CLR)

  • Os compiladores do Microsoft C# e Visual Basic agora podem produzir um nenhum assembly de interoperabilidade primário (não-PIA). Um assembly de PIA não pode usar os tipos de COM sem a implantação do relevante primary interop assembly (PIA). Ao consumir os assemblies de PIA não produzidos pela Visual C# ou Visual Basic, você deve fazer referência o assembly PIA sobre o comando de compilação antes de fazer referência a qualquer conjunto de PIA não usa a biblioteca.

MSBuild e projetos do visual C++

  • Projetos do Visual C++ agora sejam baseiam na MSBuild ferramenta. Conseqüentemente, os arquivos de projeto usam um novo formato de arquivo XML e um .vcxproj arquivo sufixo. Visual C++ 2010automaticamente arquivos de versões anteriores do projeto converte Visual Studio para o novo formato de arquivo.

    Um projeto existente é afetado se ele depende da ferramenta de compilação anterior, o vcbuild. exe ou o sufixo do arquivo de projeto, .vcproj.

  • Em versões anteriores, Visual C++ oferece suporte a avaliação atrasadade folhas de propriedades. Por exemplo, uma folha de propriedades pai poderia importar uma folha de propriedades do filho e pai poderia usar uma variável definida no filho para definir outras variáveis. Avaliação atrasada habilitado pai para usar a variável de filho, mesmo antes que a folha de propriedades de filho foi importada. Em Visual C++ 2010, uma variável de folha de projeto não pode ser usada antes que ele está definido como MSBuild suporta apenas antecipado avaliação.

Integrated Development Environment

  • O encerramento de aplicativo caixa de diálogo não termina a um aplicativo.

    Em versões anteriores, quando o Abort () ou terminate() a compilação de varejo de um aplicativo de fechado de função, a biblioteca de tempo de execução c exibida uma mensagem de encerramento do aplicativo em uma caixa de diálogo ou janela de console. A mensagem disse em parte, "Este aplicativo has requested the Runtime to terminate it in an unusual way. Entre em contato com equipe de suporte do aplicativo para obter mais informações."

    A mensagem de encerramento do aplicativo foi redundante, porque o Windows subseqüentemente exibido o manipulador de terminação do atual, que tem sido o relatório de erros do Windows (Dr. Caixa de diálogo do Watson) ou o Visual Studio depurador. A partir de Visual Studio 2010, a biblioteca de tempo de execução c não exibe a mensagem. Além disso, o runtime impede que o aplicativo final antes que um depurador é iniciado.

    Esta é uma alteração significativa somente se você depender o comportamento anterior da mensagem de encerramento do aplicativo.

  • Especificamente para Visual Studio 2010, IntelliSense não funciona para o C + + / CLI código ou atributos, Localizar todas as referências não funciona para variáveis locais, e o modelo de código não recuperar os nomes de tipo de assemblies importados ou resolver tipos seus nomes totalmente qualificados.

Bibliotecas Visual C++

  • O SafeInt classe está incluído no Visual C++ e não está mais em um download separado. Esta é uma alteração significativa somente se você tiver desenvolvido uma classe que também é chamada de "safeint".

  • O modelo de implantação de bibliotecas mais usa manifestos para localizar uma versão específica de uma biblioteca de vínculo dinâmico. Em vez disso, o nome de cada biblioteca de vínculo dinâmico contém o seu número de versão e você usar esse nome para localizar a biblioteca. For more information, see Implantação em 2010 do Visual C++.

  • Nas versões anteriores do Visual Studio, você pode recriar as bibliotecas de tempo de execução. Visual C++ 2010não suporta a criação de suas próprias cópias dos arquivos de biblioteca de tempo de execução C.

Standard Template Library

  • O <iterator> cabeçalho não está mais incluído automaticamente por muitos outros cabeçalho arquivos. Em vez disso, inclua esse cabeçalho explicitamente se precisar de suporte para os iteradores autônomo definidos no <interator> cabeçalho.

  • No <algorithm> cabeçalho, o checked_* e unchecked_* funções são removidas. E de <iterator> cabeçalho, o checked_iterator classe for removido e o unchecked_array_iterator classe foi adicionada.

  • O CComPtr::CComPtr(int) construtor é removido. Esse construtor permitido um CComPtr objeto para ser construído a partir de NULL macro, mas era desnecessária e permitido sentida construções a partir de zero inteiros.

    A CComPtr ainda podem ser construídos a partir de NULL, que é definido como 0, mas irá falhar se construído a partir de um número inteiro diferente de 0 literal. Você provavelmente encontrar esse problema na situação descrita pelo pseudocódigo a seguir.

    pair<X, CComPtr<T>> myVar;
    myVar = make_pair(x, NULL);
    

    Para corrigir a segunda instrução, use o nullptr palavra-chave em vez da NULL macro.

    myVar = make_pair(x, nullptr)
    
  • O seguinte ctype funções de membro foram removidas: ctype::_Do_narrow_s, ctype::_Do_widen_s, ctype::_narrow_s, ctype::_widen_s. Se um aplicativo usa uma dessas funções de membro, você deve substituí-lo com a versão correspondente não seguro: CType::do_narrow, ctype::do_widen, ctype::narrow, ctype::widen.

CRT, MFC e bibliotecas do ATL

  • Suporte para os usuários criem bibliotecas CRT, MFC e ATL foi removido. Por exemplo, um número apropriado nmake não é fornecido um arquivo. No entanto, os usuários ainda têm acesso ao código-fonte para essas bibliotecas. E um documento que descreve as opções do MSBuild que a Microsoft usa para criar essas bibliotecas provavelmente será publicado em um Blog da equipe do Visual C++.

  • Suporte a MFC para IA64 foi removido. No entanto, o suporte do CRT e ATL em IA64 ainda é fornecido.

  • Ordinais não mais são reutilizadas no MFC a definição de módulo (. def) arquivos. Essa alteração significa ordinais não será diferentes entre versões secundárias e compatibilidade binária para service packs e quick fix engineering versões será diminuída.

  • Uma nova função virtual foi adicionada para o a classe de CDocTemplate. Essa nova função virtual é CDocTemplate::OpenDocumentFile. A versão anterior do OpenDocumentFile tinha dois parâmetros. A nova versão tem três parâmetros. Para suportar o Gerenciador de reinicialização, qualquer classe derivada de CDocTemplate deve implementar a versão que tem três parâmetros. Para obter mais informações sobre a função, consulte CDocTemplate::OpenDocumentFile. O novo parâmetro é bAddToMRU.

Macros e variáveis de ambiente

  • A variável de ambiente __MSVCRT_HEAP_SELECT não é mais suportado. A variável de ambiente é removida e não há nenhum substituto.

Referência do Microsoft Macro Assembler

Consulte também

Outros recursos

Introdução ao Visual C++ de 2010