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++.
Vida útil do objeto e o gerenciamento de recursos (C++ moderno)
Pimpl para o encapsulamento de tempo de compilação (C++ moderno)
Erros e manipulação de exceção (guia de programação C++ moderno)