Скажем, у меня есть следующая функция:
const std::string& Cat::getKittenName() const
{
Kitten* kitty = getKitty();
return kitty->getName();
}
Где Kitten::getName
возвращает const std::string&
, как лучше всего обрабатывать случай, когда kitty
является nullptr
? Я мог бы вернуться std::string("")
, но затем возвращаю ссылку на временное и практически гарантирующее поведение undefined. Я мог бы изменить функцию getKittenName
, чтобы вернуть std::string
, чтобы обойти это, но затем я представляю избыточную копию для всех случаев, когда kitty
доступен. Сейчас я чувствую, что лучший вариант:
const std::string& Cat::getKittenName() const
{
Kitten* kitty = getKitty();
if (kitty)
{
return kitty->getName();
}
static std::string empty("");
return empty;
}
Единственная проблема может быть, если "волшебная статика" недоступна. Есть ли проблемы с этим решением или есть лучший способ сделать это?