Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 281 — #319<br />
✐<br />
10.2. Espacios de nombres<br />
y si utiliza<br />
static void f();<br />
significa que f() es visible sólo para la unidad de traducción, (esto suele llamarse<br />
estático a fichero (file static).<br />
10.1.3. Otros especificadores para almac<strong>en</strong>ami<strong>en</strong>to de clases<br />
El uso de static y extern está muy ext<strong>en</strong>dido. Exist<strong>en</strong> otros dos especificadores<br />
de tipo de almac<strong>en</strong>ami<strong>en</strong>to bastante m<strong>en</strong>os conocidos. El especificador auto<br />
no se utiliza prácticam<strong>en</strong>te nunca porque le dice al compilador que esa es una variable<br />
local. auto es la abreviatura de automático«» y se refiere a la forma <strong>en</strong> la que el<br />
compilador reserva espacio automáticam<strong>en</strong>te para la variable. El compilador siempre<br />
puede determinar ese hecho por el contexto <strong>en</strong> que la variable se define por lo<br />
que auto es redundante.<br />
El especificador register aplicado a una variable indica que es una variable<br />
local (auto), junto con la pista para el compilador de que esa variable <strong>en</strong> concreto va<br />
a ser ampliam<strong>en</strong>te utilizada por lo que debería ser almac<strong>en</strong>ada <strong>en</strong> un registro si es<br />
posible. Por tanto, es una ayuda para la optimización. Difer<strong>en</strong>tes compiladores respond<strong>en</strong><br />
de difer<strong>en</strong>te manera ante dicha pista; incluso ti<strong>en</strong><strong>en</strong> la opción de ignorarla.<br />
Si toma la dirección de la variable, el especificador register va a ser ignorado casi<br />
con total seguridad. Se recomi<strong>en</strong>da evitar el uso de register porque, g<strong>en</strong>eralm<strong>en</strong>te,<br />
el compilador suele realizar las labores de optimización mejor que el usuario.<br />
10.2. Espacios de nombres<br />
Pese a que los nombres pued<strong>en</strong> estar anidados d<strong>en</strong>tro de clases, los nombres de<br />
funciones globales, variables globales y clases se <strong>en</strong>cu<strong>en</strong>tran incluidos d<strong>en</strong>tro de un<br />
único espacio de nombres. La palabra reservada static le da control sobre éste permitiéndole<br />
darle tanto a variables como a funciones <strong>en</strong>lazado interno (es decir convirtiéndolas<br />
<strong>en</strong> estáticas al fichero). Pero <strong>en</strong> un proyecto grande, la falta de control<br />
sobre el espacio de nombres global puede causar problemas. Con el fin de solv<strong>en</strong>tar<br />
esos problemas para clases, los programadores suel<strong>en</strong> crear nombres largos y complicados<br />
que ti<strong>en</strong><strong>en</strong> baja probabilidad de crear conflictos pero que supon<strong>en</strong> hartarse<br />
a teclear para escribirlos. (Para simplificar este problema se suele utilizar typedef).<br />
Pese a que el l<strong>en</strong>guaje la soporta, no es una solución elegante.<br />
En lugar de eso puede subdividir el espacio de nombres global <strong>en</strong> varias partes<br />
más manejables utilizando la característica namespace de <strong>C++</strong>. La palabra reservada<br />
namespace, de forma similar a class, struct, <strong>en</strong>um y union, sitúa los<br />
nombres de sus miembros <strong>en</strong> un espacio difer<strong>en</strong>te. Mi<strong>en</strong>tras que las demás palabras<br />
reservadas ti<strong>en</strong><strong>en</strong> propósitos adicionales, la única función de namespace es la de<br />
crear un nuevo espacio de nombres.<br />
10.2.1. Crear un espacio de nombres<br />
La creación de un espacio de nombres es muy similar a la creación de una clase:<br />
281<br />
✐<br />
✐<br />
✐<br />
✐