Есть две части к мотивации:
1) Ссылка концептуально псевдоним для объекта, так что он ведет себя (насколько это возможно и полезно) как имя переменной. До тех пор, пока он находится в области видимости, он относится к одному и тому же объекту и всегда ссылается на объект. Таким образом, он не может быть заменен на сиденье и не равен нулю.
2) Ссылки были изобретены с целью передачи параметров перегруженным операторам. Нет особой необходимости переустанавливать такие параметры, и они обязательно должны всегда ссылаться на объект, потому что оператор всегда имеет операнды (или только один операнд для унарных операторов). Функция, которая подходит для этой цели, была псевдонимом для операнда, поэтому ссылки были задуманы как псевдонимы.
Будучи задуманным таким образом, у них есть другие виды использования. Ни одно из этих применений не принесло бы пользы от того, что они были повторно посажены или были пустыми, чтобы сделать случай изменения концепции от имени объекта. Ближайший, вероятно, используется как нестатические члены данных в классах. В этом случае они вмешиваются в такие вещи, как копирование, но опять же неясно, как элемент справочных данных должен «вести себя» при назначении копии, поэтому нет четкого способа справиться с этим. Указатели будут иметь дело с случаями, которые ссылки не могут.
Что касается «Было бы также полезно, если ссылка может быть нулевой, например, проверить, действительно ли возвращаемая ссылка действительна до ее использования»: как бы поддержка нулевой ссылки была поддержана с помощью проверки правильности? Действителен нулевой указатель. Недопустимый указатель висячего не является нулевым и не может быть проверен. Я бы подумал, что это так же со ссылками, да? –
Еще лучше, потому что ссылка не может быть «нулевой», вам даже не нужно ничего проверять! –
@KerrekSB - как вам лучше не проверять, завершилась ли операция, а возврат недействителен? Если объект уже находится в регистре, проверка займет один цикл, а небольшая цена - для лучшей безопасности. Учитывая, что ссылка - это не что иное, как указатель с отключенной арифметикой и автоматическим разыменованием, почему бы не отразить способность указателя быть нулевым и, следовательно, означать недействительность? Были введены ссылки, чтобы «проще и чище» использовать указатели, не так ли? –