minhas informações de contato
Correspondência[email protected]
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
(1) Derivação automática de tipo automático
auto deduz automaticamente o tipo da variável
auto não representa um tipo real, é apenas um espaço reservado para uma declaração de tipo
Auto não é onipotente e pode ser deduzido em qualquer cenário. Variáveis declaradas usando auto devem ser inicializadas para permitir que o compilador deduza seu tipo real e converta auto no tipo real em tempo de compilação.
Quando a variável não é um ponteiro ou referência, o resultado da derivação não reterá as palavras-chave const e voláteis; quando a variável for um ponteiro ou referência, o resultado da derivação reterá as palavras-chave const e voláteis;
Cenários onde auto não pode ser usado:
1.auto não pode ser usado como parâmetro de função, porque usar auto como parâmetro formal equivale a não inicializar a variável e auto não pode ser exportado;
2. Não pode ser usado para inicializar variáveis-membro não estáticas de uma classe, porque as variáveis-membro não estáticas pertencem a objetos e o tipo do objeto não é conhecido até que seja criado;
3. Você não pode usar a palavra-chave auto para definir uma matriz;
4. Você não pode usar auto para derivar parâmetros de modelo;
Cenários de uso recomendados para automóveis:
1. Usado para passagem de contêineres STL;
2. Usado para programação genérica;
(2) derivação do tipo decltype
Às vezes você não precisa ou não pode definir variáveis, mas deseja obter um determinado tipo. Você pode usar decltype para deduzir o tipo de uma expressão durante a compilação, como: int x=18; ;Isto é, deduza o tipo de a através de x
Regras de derivação:
1. A expressão é uma variável ordinária, uma expressão ordinária ou uma expressão de classe de tempo, e o tipo deduzido usando decltype é consistente com o tipo da expressão;
2. A expressão é uma função e o tipo deduzido usando decltype é consistente com o valor de retorno da função (se o valor de retorno for modificado com const, qualificadores voláteis, os qualificadores serão ignorados);
3. A expressão é um lvalue ou envolvida em (), e decltype é usado para deduzir uma referência ao tipo de expressão (se o valor de retorno for modificado com qualificadores const ou voláteis, os qualificadores serão ignorados);
Cenários de aplicação de decltype:
1. Usado principalmente em programação genérica, porque há um grande número de tipos incertos na programação genérica;
final é usado para restringir a herança de uma determinada classe ou a substituição de uma determinada função virtual.
Quando final modifica uma função, você só pode modificar funções virtuais, e a palavra-chave final deve ser colocada após a classe ou função. Quando uma função virtual é modificada com final, ela pode impedir que a subclasse substitua a função virtual da classe pai.
Quando final modifica uma classe, escreva final após o nome da classe, o que significa que esta classe não pode mais ser herdada, ou seja, esta classe não possui mais classes derivadas.
Função inicial: usada para declarar namespaces O uso de namespaces pode evitar conflitos de nomenclatura de subclasses de usuários que chamam métodos com o mesmo nome da classe pai oculta;
Nova função: defina um alias de um tipo. Observe que using na verdade fornece apenas um alias para o tipo original, em vez de definir um novo tipo. Como usar: using new type = old type, como: using my_int = int;
Usar using em vez de typedef para definir ponteiros de função torna o código mais fácil de ler. No início, typedef era usado para definir ponteiros de função, como: typedef int (.func)(int, string);Use using definição em vez disso: using func = int()(int, sequência de caracteres);
Usando pode especificar aliases para modelos, mas typedef não pode
Os primeiros compiladores C interpretavam dois colchetes em ângulo reto como operadores de deslocamento à direita
Entre os novos recursos, as regras de análise do compilador foram aprimoradas para analisar múltiplos colchetes em terminadores de parâmetro de modelo, tanto quanto possível.
Override é usado para garantir que a função a ser substituída na classe derivada tenha a mesma assinatura que a função virtual correspondente da classe base e também indica claramente que a função da classe base será substituída.
Override é escrito após a função, declarando explicitamente que a função foi substituída, e o compilador verificará o tipo da função e a função virtual da classe pai.
Escreva o tipo de valor de retorno da função após o corpo da declaração da função, auto func (parâmetro 1, parâmetro 2,...) -