Functions
F.60
Предпочитайте `T*` вместо `T&`, когда «нет аргумента» является допустимым вариантом
Причина
Указатель (T*) может быть nullptr, а ссылка (T&) не может; допустимой «нулевой ссылки» не существует. Иногда наличие nullptr как альтернативы для обозначения «нет объекта» полезно, но если это не так, ссылка нотационально проще и может давать лучший код.
Пример
string zstring_to_string(zstring p) // zstring — это char*; то есть строка в стиле C
{
if (!p) return string{}; // p может быть nullptr; не забудьте проверить
return string{p};
}
void print(const vector<int>& r)
{
// r ссылается на vector<int>; проверка не нужна
}
Примечание
Возможно, но не является допустимым C++, создать ссылку, которая по существу является nullptr (например, T* p = nullptr; T& r = *p;). Такая ошибка очень редка.
Примечание
Если вы предпочитаете нотацию с указателем (-> и/или * вместо .), not_null<T*> предоставляет те же гарантии, что и T&.
Контроль
- Помечать ???