C++ Const Pointer Usage
Intro #
Even after working with C++ for years, it's still easy to get mixed up when applying const to pointers. Following code snippet provided as reference.
Code #
GitHub Gist: https://git.io/JJ3QW
//------------------------------------------------------------------------------------------------------------------------------
struct MyType
{
int x = 0;
void Mutate() { ++x; }
};
//------------------------------------------------------------------------------------------------------------------------------
int main()
{
MyType a, b;
// Example #1 - No const usage
MyType* example1 = &a;
example1 = &b; // OK: Pointer value (address) is mutable
example1->Mutate(); // OK: Object is mutable
// Example #2 - Pointer value (address) is const, object remains mutable
// NOTE: In C#, this is equivalent to using readonly with reference types
MyType* const example2 = &a;
example2 = &b; // ERROR: Pointer value (address) is const
example2->Mutate(); // OK: Object is mutable
// Example #3 - Pointer value (address) is mutable, object is const
const MyType* example3 = &a;
example3 = &b; // OK: Pointer value (address) is mutable
example3->Mutate(); // ERROR: Object is const
// Example #4 - Pointer value (address) and object are both const
// NOTE: In C#, this is equivalent to using readonly with value types
const MyType* const example4 = &a;
example4 = &b; // ERROR: Pointer value (address) is const
example4->Mutate(); // ERROR: Object is const
}
//------------------------------------------------------------------------------------------------------------------------------