C ++ 11: 02decltype palabra clave

decltype

0. espectáculo previo a la clase

  • Obtenga el "Tipo declarado" de la expresión, llamadadecltpe
  • Pensamiento: similitudes y diferencias entre typeid y decltype
    • typeidSe 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 , consultesizeof
  • 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

Supongo que te gusta

Origin www.cnblogs.com/fewolflion/p/12747397.html
Recomendado
Clasificación