Знание С++ немного по частям. Я переработал какой-то код на работе. Я изменил функцию, чтобы вернуть ссылку на тип. Внутри я просматриваю объект на основе переданного идентификатора, а затем возвращаю ссылку на объект, если он найден. Конечно, я столкнулся с вопросом о том, что вернуть, если я не нахожу объект, и, оглядываясь по Сети, многие утверждают, что возвращение "нулевой ссылки" на С++ невозможно. Основываясь на этом совете, я попробовал трюк о возврате успеха /fail boolean и внесении ссылки на объект в параметр out. Тем не менее, я столкнулся с препятствием, требующим инициализации ссылок, которые я передал бы как фактические параметры, и, конечно, нет никакого способа сделать это. Я отступил к обычному подходу, просто вернув указатель.
Я спросил об этом коллегу. Он часто использует следующий трюк, который принимается как последней версией компилятора Sun, так и gcc:
MyType& someFunc(int id)
{
// successful case here:
// ...
// fail case:
return *static_cast<MyType*>(0);
}
// Use:
...
MyType& mt = somefunc(myIdNum);
if (&mt) // test for "null reference"
{
// whatever
}
...
Я некоторое время поддерживал эту базу кода, но обнаружил, что у меня не так много времени, чтобы найти небольшие детали о языке, как хотелось бы. Я копал свой справочник, но ответ на этот вопрос ускользает от меня.
Теперь у меня был курс С++ несколько лет назад, и в нем мы подчеркнули, что на С++ все это типы, поэтому я стараюсь держать это в уме, когда все обдумывает. Деконструкция выражения: "static_cast <MyType> (0);", мне действительно кажется, что мы принимаем буквальный нуль, передаем его указателю на MyType (который делает его нулевым указателем), а затем применяем оператор разыменования в контекст назначения ссылочному типу (возвращаемый тип), который должен дать мне ссылку на тот же объект, на который указывает указатель. Это похоже на возвращение нулевой ссылки на меня.
Любые советы, объясняющие, почему это работает (или почему это не должно), будут очень признательны.
Спасибо, Chuck