разница между catch (domain_error const & x) и catch (const domain_error & x) - PullRequest
2 голосов
/ 10 августа 2011

Я хотел бы знать, являются ли следующие утверждения одинаковыми или разными

1> catch (domain_error const & x) 
2> catch (const domain_error & x)
3> catch (domain_error & const x) // I think this is illegal

По сути, я думал, что case 1> и case 2> совпадают, а case 3> не является допустимым синтаксисом Пожалуйста, поправьте меня, если я ошибаюсь.

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

Вы правы; первые два эквивалентны, а последний является ошибкой.

В более общем смысле при работе со ссылками синтаксис

const T&

и

T const &

эквивалентны, а

T & const

не допускается.

2 голосов
/ 10 августа 2011

1) и 2) одинаковы, тогда как 3) недопустимо, так как вы не можете изменить саму ссылку - вы можете изменить толькок чему это относится.

Вот правила:

В C const ставится перед типом, чтобы сделать его постоянным.Это также поддерживается в C ++, но добавлен новый расширенный синтаксис: const также может быть помещен справа от типа, чтобы сделать постоянным то, что слева от него.Примеры:

  • const char * c; - это определяет непостоянный указатель на константу char c.То есть вы можете изменить значение указателя, но не значение, на которое он указывает.Это синтаксис C.
  • char const * c; - то же самое, но с использованием правил C ++ const.
  • char * const p; - это определяет постоянный указатель на непостоянный символ.Вы не можете изменить сам указатель, но можете изменить указанное значение.
  • char const * const p; - это определяет постоянный указатель на постоянный символ.Здесь вы ничего не можете изменить.
  • char const * * const p; - это определяет постоянный указатель на непостоянный указатель на постоянный символ.Насколько это круто?
...