В правильно сформированной программе на C ++ ссылки никогда не бывают NULL
(точнее, адрес объекта, на который у вас есть ссылка, никогда не может быть NULL
).
Так что не только ответ «нет, нет пути», но и следствие «это не имеет смысла».
Ваше утверждение относительно C также не имеет смысла, так как C не имеет ссылок.
А что касается Java, его «ссылки» во многом похожи на указатели C ++, включая этот.
Сравнение такого специфического поведения между различными языками является чем-то вроде глупого поручения.
Если вам нужно это поведение «необязательного объекта», вам нужны указатели:
std::string xxx(const NotMyClass* ptr) {
if (ptr == NULL)
throw SomeException();
const NotMyClass& ref = *ptr;
/* ... */
}
Но подумайте, действительно ли вам это нужно; достойной альтернативой может быть boost::optional
, если вы действительно это делаете.