Вы бы использовали T* const &
в качестве параметра, если значение объекта-указателя может быть изменено чем-то внешним по отношению к вашей функции, и вы хотите иметь возможность наблюдать изменения в значении объекта-указателя или если вы хотите сохранить ссылку или указатель на объект указателя для последующего чтения.
Параметр T*
(эквивалентный T* const
в качестве параметра функции) просто дает вам копию объекта указателя, снимок его значения, когда он был передан вашей функции.
void foo( char* const& ptr )
{
char* p1 = ptr; // initial value
global_fn(); // ptr might be changed
char* p2 = ptr; // new value of ptr
}
против
void foo2( char* ptr )
{
char* p1 = ptr; // initial value
global_fn(); // ptr can't be changed, it's local to this function
char* p2 = ptr; // will be the same as p1
}
Технически, даже сама функция может изменить значение указателя, на который передается ссылка.
* 1014 Е.Г. *
char* p;
std::ptrdiff_t foo( char* const& ptr )
{
++p;
return p - ptr; // returns 0, would return 1 if the parameter was by value
}
int main()
{
char test[] = "Hello, world!";
p = test;
foo( p );
}