auto palabra clave (C ++ 11)

Este blog escribirá una nueva característica automática en el estándar C ++ 11 y explicará cómo usarla.

palabra clave automática

  • Introducción al auto

Introducción a auto: En C ++ 11, auto se usa como un nuevo indicador de tipo para instruir al compilador.Las variables declaradas por auto deben ser deducidas por el compilador en tiempo de compilación . En pocas palabras, auto equivale a una derivación automática .
En los primeros C / C ++, el significado de auto es: las variables modificadas con auto son variables locales con memoria automática .

int TestAuto()
{
    
    
  return 10;
}
int main()
{
    
    
  int a = 10;
  auto b = a; //推导出b为int
  auto c = 'a'; //推导出c为char
  auto d = TestAuto(); //和TestAuto返回的类型一样,即int
  cout << typeid(b).name() << endl;
  cout << typeid(c).name() << endl;
  cout << typeid(d).name() << endl;
 
//auto e; 无法通过编译,使用auto定义变量时必须对其进行初始化
 
  return 0;
}

Permítanme mencionar que typeid (). Name () es una función para obtener el nombre del tipo de variable. El resultado de ejecución es el siguiente.
Inserte la descripción de la imagen aquí
Algunas personas pueden pensar que auto es inútil. Mira el siguiente código:

#include<iostream>
#include<map>
using namespace std;

int main()
{
    
    
	std::map<std::string, std::string> dict;
	//假设不使用auto就需要写这一长串类型
	std::map<std::string, std::string>::iterator it = dict.begin();
	//使用auto后就方便很多
	auto it = dict.begin();
	
	cout << typeid(it).name() << endl;
	return 0;
}

La cadena grande antes es el nombre del tipo, que es mucho más conveniente si usa auto.

  • Reglas de uso automático

1.
Auto se usa en combinación con punteros y referencias. Cuando usa auto para declarar tipos de puntero, no hay diferencia entre usar auto y auto *, pero cuando usa auto para declarar tipos de referencia, debe agregar &

int main()
{
    
    
  int x = 10;
  auto a = &x;
  auto* b = &x;
  auto& c = x;
  cout << typeid(a).name() << endl;
  cout << typeid(b).name() << endl;
  cout << typeid(c).name() << endl;
  return 0;
}

Los resultados de la ejecución del código son los siguientes:
Inserte la descripción de la imagen aquí

2. Defina múltiples variables
en la misma línea. Al declarar múltiples variables en la misma línea, estas variables deben ser del mismo tipo; de lo contrario, el compilador informará un error, porque el compilador en realidad solo
deduce el primer tipo y luego usa el deducción El tipo que sale define otras variables.

void TestAuto()
{
    
    
  auto a = 1, b = 2;
  //auto c = 3, d = 4.0; // 该行代码会编译失败,因为c和d的初始化表达式类型不同
  cout << typeid(a).name() << endl;
  cout << typeid(b).name() << endl;
}

Los resultados de la operación también son obvios:
Inserte la descripción de la imagen aquí
3. Auto no se puede utilizar como un parámetro de función.
TestAuto creará un marco de pila en la pila al compilar, pero necesita saber el tamaño del espacio al abrir espacio. Auto a es una parte del marco de la pila, y no sé qué tan grande es el parámetro automático. Por lo tanto, el marco de la pila no sabe cuánto espacio debe abrirse

// 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导
void TestAuto(auto a)
{
    
    }

4. Auto no se puede usar directamente para declarar matrices.
Debido a que las matrices también involucran tamaño, en el siguiente ejemplo, el tipo de a es estrictamente int [3], por lo que el tamaño de b también es incierto.

void TestAuto()
{
    
    
  int a[] = {
    
    1,2,3};
  auto b[3] = a;
}

5. Para evitar confusiones con auto en C ++ 98, C ++ 11 solo conserva el uso de auto como indicador de tipo.
6. La ventaja más común de auto en la práctica es el nuevo bucle for proporcionado por C ++ 11, Y expresiones lambda para usar en conjunto.
7. Auto no puede definir variables miembro no estáticas de la clase
8. No puede usar auto como parámetro de plantilla al crear una instancia de una plantilla

Supongo que te gusta

Origin blog.csdn.net/NanlinW/article/details/103392859
Recomendado
Clasificación