На самом деле ссылка используется, чтобы избежать ненужной копии объекта.
Теперь, чтобы понять, почему используется const
, попробуйте это:
std::string & x= std::string(); //error
Это даст ошибку компиляции. Это связано с тем, что выражение std::string()
создает временный объект, который нельзя привязать к неконстантной ссылке. Однако временное значение может быть связано со ссылкой const
, поэтому необходимо const
:
const std::string & x = std::string(); //ok
Теперь вернемся к конструктору в вашем коде:
CMyException (const std::string & Libelle = std::string());
Устанавливает значение по умолчанию для параметра. Значение по умолчанию создается из временного объекта. Следовательно, вам нужно const
(если вы используете ссылка ).
Существует также преимущество в использовании ссылки const : если у вас такой конструктор, вы можете вызвать исключение следующим образом:
throw CMyException("error");
Создает временный объект типа std::string
из строкового литерала "error"
, и этот временный объект привязывается к ссылке const
.