Espacios de nombres
Variantes
Acciones

Búsqueda de nombre

De cppreference.com
< cpp‎ | language

La búsqueda de nombre es el procedimiento por el cual un nombre, cuando se encuentra en el programa, es asociado con su declaración.

Por ejemplo, para compilar std::cout << std::endl;, el compilador realiza:

  • búsqueda de nombre sin calificar para el nombre std, cuya declaración de espacio de nombres std se encuentra en el encabezado <iostream>
  • búsqueda de nombre calificado para el nombre cout, cuya declaración de variable se encuentra en el espacio de nombres std
  • búsqueda de nombre calificado para el nombre endl, que es una declaración de plantilla de función en el espacio de nombres std
  • búsqueda por dependencia de argumento para el nombre operator<< que encuentra múltiples declaraciones de plantillas de función en el espacio de nombres std y búsqueda por nombre calificado para el nombre std::ostream::operator<< que encuentra múltiples declaraciones de función miembro de la clase std::ostream

Para nombres de funciones y plantillas de funciones, la búsqueda de nombre puede asociar varias declaraciones con el mismo nombre, y se puede obtener declaraciones adicionales de la búsqueda dependiente de argumento. La deducción de argumentos de plantilla también se puede aplicar, y el conjunto de declaraciones se envía a resolución de sobrecarga, que selecciona la declaración a usar. Las reglas de acceso a miembro, si son aplicables, se consideran después de la búsqueda de nombre y la resolución de sobrecarga.

Para los demás nombres (variables, espacios de nombres, clases, etc.), la búsqueda debe producir una única declaración para que el programa se pueda compilar. La búsqueda de un nombre en un ámbito encuentra todas las declaraciones del nombre, con una excepción, conocida como struct hack o type/non-type hiding: dentro del mismo ámbito, algunas apariciones de un nombre pueden referirse a una declaración de una clase/strcut/union/enum que no es un typedef, mientras que el resto de las ocurrencias, o bien todas se refieren a la mismas variable, miembro de datos no estático (desde C++14), o enumerador, o bien posiblemente a una función sobrecargada o nombres de plantillas de función. En este caso, no es un error, pero el tipo del nombre está oculto para la búsqueda (el código debe usar un especificador de tipo elaborado para acceder a el).

[editar] Tipos de búsqueda

Si el nombre aparece inmediatamente a la derecha del operador de ámbito :: o posiblemente después de :: seguido de la palabra que desambigua template, ver

En otro caso, ver

[editar] Ver también

Documentación de C de Búsqueda y espacio de nombres