When you want to protect the caller's data from modification - When passing literals or expressions that cannot be modified - When you need read-only semantics for safety