C ++ não conhecer os sete características, humana absoluta círculo Wang Wei

tese 3039 Palavras, quando a aprendizagem ao longo esperado 6 minuto

Fonte: Pexels

Como uma linguagem de computador, C ++ tem muitos desenvolvimentos sofrido e mudanças.

Claro, essas mudanças não são alcançados durante a noite. C ++ tem sido a falta de vitalidade e inovação, por isso é impopular.

Mas depois de C ++ comitê de padrões decidiu acelerar o desenvolvimento da linguagem, a situação mudou.

Desde 2011, C ++ linguagem de computador tornou-se uma dinâmica, evoluindo, muito amado.

Após a transformação C ++ também não o fez simplesmente o quanto ainda é uma das linguagens de programação mais difícil. No entanto, C ++ é muito mais humano do que antes.

Este artigo é falar sobre alguns dos novos recursos do C ++ (com um 8-year-old C ++ 11, por exemplo), acredito que cada programador vai estar interessado neste tópico.

Nota: Este artigo pular algumas das características avançadas.

1. Keyword auto

Quando introduzido pela primeira vez em C ++ 11 auto, programadores que chorei!

O que significa que a auto compilador C ++ pode-se deduzir o tipo de dados em tempo de compilação, para que nem sempre têm a declarar o tipo de dados. Quando o tipo de dados é um mapa < corda, vetor < par < int, int > > > Quando é especialmente conveniente.

Sem inicializador, você não pode declarar um tipo de dados (veja a quinta linha). Esta é plausível. As instruções de linha de quinto e não deixou que o compilador deduzir o tipo de dados.

Inicialmente, função auto é limitado. Após a nova versão em C ++, a função de auto mais e mais poderosos.

Utilizar a sétima linha e oitava linha no suportes de inicialização (bracketedinitialization), que é um dos novos recursos 11 C ++.

Por favor, note que o uso de auto, o compilador deve ser capaz de obter o tipo de dados.

Uma questão interessante é: se você escreveu autoa = {1, 2, 3} O que vai acontecer? Esta é uma compilação de erros é? É um vetor?

Na verdade, C ++ 11 introduz um std :: initializer_list < tipo > Se o auto afirmação, chaves de inicialização lista é como recipientes leves.

Finalmente, como afirmado anteriormente, quando as estruturas de dados complexas, o compilador inferência de tipos útil:

Não se esqueça de verificar linha 25! automático  = Itr.second puro C ++ 17 de novos recursos. Este recurso é chamado estruturado vinculativo. Em versões mais antigas do C ++, o programador precisa adquirir cada variável separadamente. Mas a estrutura da ligação a este processo é facilitado. Além disso, se você deseja usar para obter dados de referência (referência), só precisa adicionar um símbolo - auto &  = Itr.second.

2. As expressões lambda

C ++ 11 introduz expressões lambda, que é semelhante à função anônima em JavaScript. Eles são objetos de função, sem nome, e é baseado em variáveis de captura de sintaxe simples em diferentes âmbitos. Eles também pode ser atribuído à variável.

Se você precisar de algum código menor e operação rápida, mas também não quero escrever uma função para esse fim, em seguida, lambdas útil. Outra utilização comum é a lambdas como uma função de comparação.

O exemplo acima pode explicar um monte de problemas.

Primeiro, a inicialização nota cinta é como aumentar o peso. Em seguida, o genérico begin (), end () (que também faz parte do novo C ++ 11). Lambda é seguido como uma função do comparador de dados. função lambda é declarado como automático (o qual é uma nova secção do C ++ 14). Antes de C ++ 14 não é usado para o parâmetro função é automática.

Como moderno C ++ biblioteca de impressionante definido como:

· - não capturar quaisquer objetos. Então você não pode usar as variáveis locais no escopo global de expressões lambda, você só pode usar parâmetros.

* - valores capturados por objectos alcance parcial (variáveis locais, parâmetros). Use apenas não modificável.

* - objeto local por referência (variáveis locais, parâmetros) âmbito capturado. Ele pode ser modificado. Exemplo é como se segue.

· - o valor capturado por este ponteiro.

· - capturar o objeto pelo valor de um, por referência para capturar o objeto b.

Então, se você quiser dentro da função lambda para converter os dados para outros formatos, você pode aproveitar o espaço para usar lambda, tais como:

No exemplo acima, se o valor for capturada por expressões lambda ( ) Variável local, você não pode mudar o quinto factor de linha A razão é simples - não tem permissão.

Finalmente, note que o exemplo usa Val como uma referência (de referência). Isto assegura que qualquer mudança no funções lambda mudança vector interno.

Depois de estudar moderno C ++, eles ficam encantados! (Fotografia: Ian Schneider FIG Fonte: Unsplash)

Inicialização declarações dentro 3. se / switch

Esta característica é muito amável C ++ 17:

Obviamente, ele pode, simultaneamente, verificações de condição e inicializa as variáveis nos se / switch blocos sentença. Isso ajuda a manter o código simples e refinado. forma geral:

if (init-statement (x); condição (x)) { // faz alguma coisa aqui } Else { // mais tem o escopo de x // fazer algumas outras coisas }

4. constexpr compilado

grande constexpr! Se algumas das expressões a ser avaliado, e seu valor não vai mudar quando inicializado, ele pode ser pré-cálculo do seu valor e como uma macro. Ou por constexpr C ++ 11 fornecida.

Programadores tendem a minimizar o tempo de execução. Então, se fizermos o compilador executar algumas operações e reduzir a pressão para executar, então você pode encurtar o tempo de execução.

O código acima é um exemplo comum de constexpr. Uma vez que o número de sequência Mingfei Bo Fibonacci acústico que função constexpr, em seguida, o compilador podem ser pré-cálculo FIB (20) em tempo de compilação. Então, depois da compilação, pode ser substituído 2432902008176640000 const LONGLONG bigval = FIB (20) com constlong = longo bigval.

Por favor note que passar parâmetros é um valor const. Esta é uma função chave é declarado como um constexpr - passagem de parâmetros deve ser constexpr ou const. Caso contrário, haverá uma função e a função normal, que não é pré-de tempo de compilação operação.

As variáveis também podem ser constexpr Neste caso, estas variáveis devem ser avaliados em tempo de compilação, caso contrário o erro de compilação.

Curiosamente, mais tarde introduziu constexpr-se e constexpr-lambda em C ++ 17.

5. Tuples tupla

Muito semelhante ao par, tupla é um conjunto de valores de tamanho fixo de vários tipos de dados.

Às vezes, em comparação com o tuple, o uso std :: array é mais conveniente. matriz com as funções de matriz como C liso biblioteca padrão de C ++. Esta estrutura de dados é o novo 11 C ++.

6. classe dedução argumento modelo

O nome da propriedade muito prolixo. C ++ 17 início do modelo de classe argumento de modelo dedução padrão pode também ser levada a cabo. Antes, modelo argumento dedução só suportam modelo de função. O resultado é:

std :: par < std :: string, int >  user = { "M", 25}; // anterior utilizador std :: par = { "M", 25}; // C ++ 17

Esta derivação é "escondida". Este tupla é ainda mais conveniente.

// anterior std :: tuple < std :: string, std :: string, int >  de utilizador ( "M", "Chy", 25); // dedução em ação! std :: tupla usuário2 ( "M", "Chy", 25);

Este recurso não é muito mais útil para as pessoas que não estão familiarizados com os modelos C ++ para.

7. ponteiros inteligentes

Ponteiro, por vezes terrível. Desde a linguagem C ++ dá aos programadores um grande grau de liberdade, por isso às vezes é fácil de atirar no próprio pé. E em muitos casos, o problema é causado pelo ponteiro.

Felizmente, ponteiros inteligentes 11 introduz C ++, ponteiros inteligentes é muito mais conveniente do ponteiro normal. Eles ajudar os programadores a evitar vazamentos de memória através da liberação oportuna de memória. Eles também contribuem para o código atinge um nível anormal de segurança.

C ++ introduz muitas características novas para a versão mais recente da linguagem de computador. Se você está interessado, você pode entender.

polegares Mensagem atenção

Juntos, compartilhar o aprendizado e desenvolvimento de AI seco

AI saúda a atenção de todo o enforcamento plataforma da classe media "ler técnica do núcleo"

Fantasy Westward Journey: o uso de divisão de tela Buffy o cara, aumento exponencial na eficiência, um script para vergonha
Anterior
Fantasy Westward Journey: Faraó fez uma coisa boa, destruindo 200.000 yuan corpo R Precisa de ajuda fora da falência pit boss
Próximo