//: C08:Safecons.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Using const for safety
#include <iostream>
using namespace std;const int i = 100;
/* compile time */
const int j = i + 10;
/* compile time *//* L'istruzione seguente converte un puntatore in un long e lo assegna alla variabile address. In questo modo si forza il compilatore ad assegnare alla variabile 'j' una zona di memoria; infatti, in genere, non spetta al compilatore allocare memoria quando incontra una dichiarazione di variabile.*/
long address = (long)&j;
/* Forces storage (j diventa runtime) */
char buf[j + 10];
/* Still a const expression (risolta a compile time) */int main()
{
cout << "type a character & CR:";
/*Le variabili di tipo 'const', in genere, possono essere solo inizializzate e non modificate.*/
const char c = cin.get();
/* Can't change */
const char c2 = c + 'a';
cout << c2;
/* i = 0; // errore, non compila */
/* j = 0; // errore, non compila */
address = (long) & i;
/* c = 'x'; // errore, non compila */
/* c2 = 'x'; // errore, non compila */
// ...
} ///:~