13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!