Guia de programação C++ moderno

C++ é uma das linguagens de programação as mais amplamente usadas no mundo.Os programas escritos C++ são muito rápido e eficientes.O idioma é mais flexível do que outros idiomas como você pode usar o para criar uma ampla variedade do aplicativo de divertidos de jogos e emocionantes, científico para o software de alto desempenho, para drivers de dispositivo, para programas inseridos, e o cliente Windows aplicativos.Por mais de 20 anos, C++ foi usado para resolver esses problemas como e muitas outras.O que você pode não saber que é um número crescente de programadores C++ se dobrou acima de programação sem-graça ctype -- estilo de atuais e para ter donned vez C++ modernos.

Um dos requisitos originais para C++ foi compatibilidade com versões anteriores com C - linguagem.Desde então, C++ deixou com várias iterações - c com classes, então a especificação da linguagem de original C++, e então vários aprimoramentos subsequentes.Devido a essa herança, C++ é normalmente conhecido como uma linguagem de programação do paradigma.Em C++, você pode fazer a programação puramente procedural ctype de estilo que envolve ponteiros não processada, matrizes, cadeias de caracteres NULL- terminadas, estruturas de dados personalizados, e outros recursos que podem habilitar o maior desempenho mas também pode desovar erro e complexidade.Porque a programação ctype -- estilo é preocupante com os perigos como estes, um dos meta fundando C++ para fazer era programas type-safe e mais fácil escrever, estende o, e manter.No início sobre, C++ abraçou paradigma de programação como a programação orientada a objeto.Ao longo dos anos, recursos foram adicionados ao idioma, juntamente com bibliotecas padrão alto testadas de estruturas de dados e os algoritmos.Essas adições que é tornaram o gráfico moderno de estilo C++ possível.

C++ modernos sublinha:

  • Escopo pilha baseado em vez da heap ou de escopo global estático.

  • Inferência de tipos automático em vez de nomes explícito do tipo.

  • Ponteiros inteligente em vez de ponteiros não processada.

  • std::string e tipos de std::wstring (consulte) <string>em vez de matrizes crua de char[] .

  • contêiners deBiblioteca padrão de modelo (como) STL de vector, de list, e de map em vez de matrizes crua ou de contêiner personalizados.Consulte <vector>, <list>, e <map>.

  • Algoritmos de STL em vez de codificadas manualmente.

  • Exceções, para relatar e manipular condições de erro.

  • Comunicação livre inter- de segmento usando STL std::atomic<> (consulte) <atomic>em vez de outros mecanismos de comunicação de inter- segmento.

  • funções lambda embutido em vez das funções pequenas implementadas separadamente.

  • Intervalo- base para que os loops escrevam o loop mais robustos que funcionam com matrizes, contêiner de STL, e coleções de Tempo de Execução do Windows no formulário for (for-range-declaration:expression).Isso é parte do suporte a linguagem principal.Para obter mais informações, consulte Instrução for com base em intervalo (C++).

O próprio idioma C++ também deixou.Compare os seguintes trechos de código.Este um mostra como as coisas usados para estar em C++:

// circle and shape are user-defined types
circle* p = new circle( 42 ); 
vector<shape*> v = load_shapes();

for( vector<circle*>::iterator i = v.begin(); i != v.end(); ++i ) {
    if( *i && **i == *p )
        cout << **i << “ is a match\n”;
}

for( vector<circle*>::iterator i = v.begin();
        i != v.end(); ++i ) {
    delete *i; // not exception safe
}

delete p;

Aqui é como a mesma coisa é realizada em C++ modernos:

#include <memory>
#include <vector>
// ...
// circle and shape are user-defined types
auto p = make_shared<circle>( 42 );
vector<shared_ptr<shape>> v = load_shapes();

for_each( begin(v), end(v), [&]( const shared_ptr<shape>& s ) {
    if( s && *s == *p )
        cout << *s << " is a match\n";
} );

Em C++ modernos, você não precisa usar novo/excluir ou tratamento de exceção explícita como você pode usar ponteiros inteligente em vez disso.Quando você usa a dedução e função lambdado tipo de auto , você pode escrever código mais rápido, aperta-o, e compreende-o melhor.E for_each é líquido de limpeza, mais fácil de usar, e erros não intencional menos inclinados de um loop de for .Você pode usar o texto constante com linhas de código mínimas para escrever seu aplicativo.E você pode fazer isso código de manipulação e seguro memória seguro, e não tem nenhum alocação/desalocação ou código de erro para manipular.

C++ modernos inserir dois tipos de polimorfismo: tempo de compilação, com os modelos, e o tempo de execução, com herança e a virtualização.Você pode combinar os dois tipos de polimorfismo grande para o efeito.O modelo shared_ptr de STL usa métodos virtuais internas para realizar a exclusão aparentemente não esforço do tipo.Mas não use a virtualização para polimorfismo quando um modelo é a melhor opção.Os modelos podem ser muito eficiente.

Se você é proveniente C++ de outra linguagem, especialmente de uma linguagem gerenciada que na maioria dos tipos são tipos de referência e muito poucos são tipos de valor, saiba que classes C++ são tipos de valor por padrão.Mas você pode especifique como a referência tipos para ativar o comportamento polimorfo que oferece suporte a programação orientada a objeto.Uma perspectiva útil: tipos de valor são mais sobre a memória e o controle de layout, tipos de referência é mais sobre as classes base e funções virtuais para suportar polimorfismo.Por padrão, os tipos de valor são copyable- eles que cada possui um construtor de impressão e um operador de atribuição de impressão.Quando você especificar um tipo de referência, faça a não-copyable- desativar o construtor da classe de impressão e a atribuição de impressão operador- e usar um destrutor virtual, que suporta polimorfismo.Tipos de valor são também sobre o conteúdo, que, quando são copiados, oferecem dois valores independentes que você pode alterar separadamente.Mas são tipos de referência sobre a identidade assembly- que amável do objeto estar- e é referenciado por esse motivo às vezes como tipos polimórficas.

C++ está apresentando um renascimento porque a potência é rei novamente.Os idiomas como Java e C# são bons quando a produtividade do programador é importante, mas mostram suas limitações quando a rede e desempenho são primordiais.Para eficiência promovida e a rede, especialmente em dispositivos que tem limitada o hardware gráfico moderno, nada bate C++.

Não somente o idioma é modernos, as ferramentas de desenvolvimento, é muito.Visual Studio toma todas as partes do ciclo de desenvolvimento robustas e eficiente.Inclui ferramentas de (ALM) de gerenciamento do ciclo de vida do aplicativo, aprimoramentos do IDE como o IntelliSense, mecanismos de ferramentas e como XAML, e compilar, depuração, e muitas outras ferramentas.

Os artigos nesta parte da documentação fornecem diretrizes e práticas recomendadas para os recursos mais importantes e técnicas de alto nível para escrever programas mais modernos C++.

Consulte também

Referência

Expressões lambda C++

Outros recursos

Referência de linguagem C++

Referência da biblioteca C++ padrão