Почему [мы] обычно тоже перегружаемся test(T* )
?
Я не уверен, что мы обычно делаем что-то подобное, но если бы кто-то перегрузил дляуказатель, это было бы потому, что указатели ведут себя иначе, чем типы объектов .Помните, что указатель на самом деле не объект, а адрес объекта.
Причина, по которой test(a)
компилируется и запускается без проблем, заключается в том, что он принимает ссылку на указатель на объект как его параметр.Таким образом, когда строка cout << *value << endl;
выполняется, указатель разыменовывается обратно к объекту, и мы видим, что 4
выводится на стандартный вывод.