Что такое конструктор-копировщик в С

Я слышал, что помимо обыкновенного конструктора по-умолчанию и пользовательского конструктора в языке С также имеется некий конструктор-копировщик.

Подскажите пожалуйста, что это за конструктор и что такое он копирует?

Помимо конструктора и деструктора, компилятор по-умолчанию предоставляет также конструктор-копировщик, который вызывается каждый раз, когда нужно создать копию (!) объекта.

Происходит это всё таким образом:

Когда объект передаётся как значение либо в функцию, либо из функции в виде возврат, всегда создаётся его временная копия. Если в программе обрабатывается объект, созданный пользователем, то для выполнения этих операций вызывается конструктор-копировщик класса.

Все копировщики принимают только один параметр, и это - ссылка на объект в том же классе. Разумно будет сделать эту ссылку константной, так как конструктор не должен изменять передаваемый в него объект, например:

Cat(const Cat