decltype
0. espectáculo previo a la clase
- Obtenga el "Tipo declarado" de la expresión, llamada
decltpe
- Pensamiento: similitudes y diferencias entre typeid y decltype
typeid
Se utiliza para devolver el tipo real del objeto al que apunta el puntero o la referencia.
1. Conoce el tipo de expresión
- Derive el tipo de una expresión en tiempo de compilación , consulte
sizeof
- Comprende el siguiente código
int x = 0;
decltype(x) y = 1; //y -> int
decltype(x+y) z = 0; //z->int
const int& i = 1;
decltype(i) j = y; //j -> const int &
const decltype(z) *p = &z; //*p -> const int, p->const int *
decltype(z)* pi = &z; // *pi ->int, pi->int*
decltype(pi)* pp = π // *pp ->int*, pp->int**
2. Las reglas de derivación de decltype
- Regla 1: exp es un identificador, la expresión de acceso de clase, decltype (exp) y exp tienen el mismo tipo.
int i = 0; decltype(i) x = 0;
- Regla 2: exp es una llamada de función, el tipo de decltype (exp) y el valor de retorno son los mismos
int add(int ,int ); decltype(add());
- Regla 3: en otros casos, si exp es un valor de l, entonces dectype (exp) es una referencia de valor de tipo exp, de lo contrario es coherente con el tipo exp.
struct Foo {int x;};
decltype(foo.x) a = 0; // a->int
// 左值就是左值引用,右值,就是原类型
decltype((foo.x)) b = a; // b->const int &
3. La aplicación práctica del decltype
- Principiantes, poca experiencia.
- El autor no comprende los ejemplos , pero pienso en un ejemplo, suma (T1 x, T2 y), qué pregunta se usa para el valor de retorno, y ahora se puede deducir por tipo.
4. Otros puntos de conocimiento
- Al usar decltype para derivación, sus miembros no heredarán const o calificadores volátiles .
5. Resumen
- En la programación no genérica, no necesitamos deducir el tipo, porque el tipo de la variable en cualquier expresión es claro, y las operaciones, llamadas a funciones, etc. también tienen tipos de retorno claros. En la programación genérica, el tipo se vuelve desconocido .
add (T a1, Y a2);//两个不同的类型,add()的返回值类型怎么写?
En este caso, se produjo la derivación de tipo.
- Similitudes y diferencias entre decltype y auto
Léame
- 1. La primera edición de 20200420: consulte el contenido de 1.1.2 de "Aplicación en profundidad de C ++ 11"
- La Sección 3 "Aplicación práctica" no se entiende bien