Key Considerations for const Usage:
- Variables declared with const cannot be modified
- const variables must be initialized during declaration
- When initializing one object with another, their const status doesn't affect compatibility
int value = 42;
const int const_value = value;
int new_value = const_value;
References to Constants:
- Constants (const variabels) must be bound to constant references
const int max_size = 1024;
const int& ref1 = max_size;
// int& ref2 = max_size; // Error: non-const reference to const object
Top-level vs Low-level const:
These concepts determine validity during copying (assignment or parameter passing).
Top-level const can apply to any object type (pointers, references, primitives). Low-level const only applies to compound types like pointers and references.
Idenitfying const Levels:
-
By syntax:
- If const appears without & or * before the varible name, it's top-level
- Otherwise, it's low-level
-
For pointers:
- If pointer address cannot change (const pointer), it's top-level
- If pointer points to const data, it's low-level
const int fixed = 10;
// int* ptr = &fixed; // Error: cannot convert const int* to int*
Copy Assignment Rules:
- Top-level const can be ignored during assignment
- Low-level const must match on both sides
- Non-const can convert to const, but not vice versa
int x = 0;
const int y = 42;
const int* ptr1 = &y;
ptr1 = &x; // Valid: int* converts to const int*
Reference Initialization Rules:
int num = 0;
const int& const_ref = 10;
num = const_ref; // Valid assignment
Pointer Examples:
int var1 = 10;
const int var2 = 20;
// int* const ptr2 = &var2; // Error: cannot convert const int* to int*
const int* const ptr3 = &var1; // Valid
// int* ptr4 = ptr3; // Error: cannot convert const int* to int*
Assignment Behavior:
int a = 10, b = 20;
const int c = 42;
const int* ptrA = &c;
const int* const ptrB = ptrA;
int* const ptrC = &a;
// *ptrA = *ptrB; // Error: cannot modify const data
ptrA = ptrB; // Valid: pointer value can change
// ptrC = &b; // Error: cannot change const pointer