//: 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 */
// ...

} ///:~