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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 225 — #263<br />

✐<br />

8.1. Sustitución de valores<br />

de almac<strong>en</strong>ami<strong>en</strong>to <strong>en</strong> difer<strong>en</strong>tes módulos. Entonces, el <strong>en</strong>lazador vería la misma<br />

definición <strong>en</strong> múltiples archivos objeto, lo que causaría un error <strong>en</strong> el <strong>en</strong>lace. Como<br />

las constantes utilizan <strong>en</strong>lace interno, el <strong>en</strong>lazador no int<strong>en</strong>ta <strong>en</strong>lazar esas definiciones<br />

a través de los módulos, y así no hay colisiones. Con los tipos básicos, que son<br />

los se v<strong>en</strong> involucrados <strong>en</strong> la mayoría de los casos, el compilador siempre realiza<br />

propagación de constantes.<br />

8.1.2. constantes seguras<br />

El uso de las constantes no está limitado a la sustitución de los #define por<br />

expresiones constantes. Si inicializa una variable con un valor que se produce <strong>en</strong><br />

tiempo de ejecución y sabe que no cambiará durante la vida de la variable, es una<br />

bu<strong>en</strong>a práctica de programación hacerla constante para que de ese modo el compilador<br />

produzca un m<strong>en</strong>saje de error si accid<strong>en</strong>talm<strong>en</strong>te algui<strong>en</strong> int<strong>en</strong>ta modificar<br />

dicha variable. Aquí hay un ejemplo:<br />

//: C08:Safecons.cpp<br />

// Using const for safety<br />

#include <br />

using namespace std;<br />

const int i = 100; // Typical constant<br />

const int j = i + 10; // Value from const expr<br />

long address = (long)&j; // Forces storage<br />

char buf[j + 10]; // Still a const expression<br />

int main() {<br />

cout

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

Saved successfully!

Ooh no, something went wrong!