Compartir tecnología

Introducción a las nuevas funciones de C 11-Parte 2

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

11. Deducción automática de tipo

(1) Derivación automática del tipo automático
auto deduce automáticamente el tipo de variable
auto no representa un tipo real, es solo un marcador de posición para una declaración de tipo
Auto no es omnipotente y se puede deducir en cualquier escenario. Las variables declaradas usando auto deben inicializarse para permitir que el compilador deduzca su tipo real y convierta auto al tipo real en el momento de la compilación.
Cuando la variable no es un puntero o una referencia, el resultado de la derivación no retendrá las palabras clave constantes y volátiles; cuando la variable es un puntero o una referencia, el resultado de la derivación retendrá las palabras clave constantes y volátiles;
Escenarios en los que no se puede utilizar el modo automático:
1.auto no se puede utilizar como parámetro de función, porque usar auto como parámetro formal equivale a no inicializar la variable y auto no se puede exportar;
2. No se puede utilizar para inicializar variables miembro no estáticas de una clase, porque las variables miembro no estáticas pertenecen a objetos y el tipo de objeto no se conoce hasta que se crea;
3. No puede utilizar la palabra clave auto para definir una matriz;
4. No puede utilizar auto para derivar parámetros de plantilla;
Escenarios de uso recomendados para automóviles:
1. Se utiliza para atravesar contenedores STL;
2. Utilizado para programación genérica;
(2) derivación del tipo decltype
A veces no necesita o no puede definir variables, pero desea obtener un tipo determinado. Puede usar decltype. decltype para deducir el tipo de una expresión durante la compilación, como por ejemplo: int x=18; ;Es decir, deducir el tipo de a a través de x
Reglas de derivación:
1. La expresión es una variable ordinaria, una expresión ordinaria o una expresión de clase de tiempo, y el tipo deducido usando decltype es coherente con el tipo de expresión;
2. La expresión es una función y el tipo deducido usando decltype es consistente con el valor de retorno de la función (si el valor de retorno se modifica con calificadores constantes y volátiles, los calificadores se ignoran);
3. La expresión es un valor l o está envuelta en (), y decltype se usa para deducir una referencia al tipo de expresión (si el valor de retorno se modifica con calificadores constantes o volátiles, los calificadores se ignoran);
Escenarios de aplicación de decltype:
1. Se utiliza principalmente en programación genérica, porque hay una gran cantidad de tipos inciertos en programación genérica;

12.uso final

final se utiliza para restringir la herencia de una determinada clase o la anulación de una determinada función virtual.
Cuando final modifica una función, solo puede modificar funciones virtuales y la palabra clave final debe colocarse después de la clase o función. Cuando una función virtual se modifica con final, puede evitar que la subclase anule la función virtual de la clase principal.
Cuando final modifica una clase, escriba final después del nombre de la clase, lo que significa que esta clase ya no puede ser heredada, es decir, esta clase ya no tiene clases derivadas.

13.usando

Función inicial: se utiliza para declarar espacios de nombres. El uso de espacios de nombres puede evitar conflictos de nombres de subclases de usuarios que llaman a métodos con el mismo nombre de la clase principal oculta;
Nueva función: define un alias de un tipo. Tenga en cuenta que usar en realidad solo proporciona un alias al tipo original, en lugar de definir un nuevo tipo. Cómo utilizar: usar nuevo tipo = tipo antiguo, como por ejemplo: usar my_int = int;
Usar en lugar de typedef para definir punteros de función hace que el código sea más fácil de leer. Al principio, typedef se usaba para definir punteros de función, como: typedef int (.func)(int, string); en su lugar, use la definición usando: usando func = int()(int, cadena);
El uso puede especificar alias para plantillas, pero typedef no puede

14.Soporte en ángulo recto

Los primeros compiladores de C interpretaron dos corchetes en ángulo recto como operadores de desplazamiento a la derecha
Entre las nuevas características, se han mejorado las reglas de análisis del compilador para analizar múltiples corchetes en ángulo recto en terminadores de parámetros de plantilla tanto como sea posible.

15.anular el uso

La anulación se utiliza para garantizar que la función que se anulará en la clase derivada tenga la misma firma que la función virtual correspondiente de la clase base, y también indica claramente que la función de la clase base será anulada.
La anulación se escribe después de la función, indicando explícitamente que la función se anula y el compilador verificará el tipo de función y la función virtual de la clase principal.

16. Postfijo del tipo de valor de retorno

Escriba el tipo de valor de retorno de la función después del cuerpo de la declaración de la función, auto func (parámetro 1, parámetro 2,...) -