CS253: Software Development with C++

Fall 2020

Const

Show Lecture.Const as a slide show.

CS253 Const

const

Example

const int BOARD_SIZE = 8;
char chessboard[BOARD_SIZE][BOARD_SIZE];
for (int i=0; i<BOARD_SIZE; i++)
    for (int j=0; j<BOARD_SIZE; j++)
        chessboard[i][j] = ' ';

if (chessboard[3][2] == ' ')    // Empty position?
    chessboard[3][2] = 'R';     // put a rook there

cout << chessboard[3][2] << '\n';
R

Reference example

void show_name(const string &name) {
    cout << "The name is: “" << name << "”\n";
}

int main(int, char *argv[]) {
    string s = argv[0];
    show_name(s);
}
The name is: “./a.out”

It’s all relative

int president = 0;
int &prez = president;
const int &potus = president;
prez = 1;   // ok
potus = 2;  // bad
c.cc:5: error: assignment of read-only reference 'potus'

constexpr

Examples

constexpr auto pi = 3.14159;
cout << pi << '\n';
3.14159
constexpr double avo=6.022e23;
avo = 1.234;
cout << avo;
c.cc:2: error: assignment of read-only variable 'avo'

Trying to cheat

Let’s try to fool constexpr:

constexpr int answer = 42;
int *p = &answer;
*p = 8675309;
cout << answer << '\n';
c.cc:2: error: invalid conversion from 'const int*' to 'int*'
constexpr int answer = 42;
int *p = const_cast<int *>(&answer);
*p = 8675309;
cout << *p << ' ' << answer << '\n';
8675309 42