AtariSMN82
@AtariSMN82
Разработчик игр

С++ Как правильно вернуть ссылку?

Этот способ возврата ссылки корректен?
struct Test {
  int val {};
  ...
  int& get_val(bool good) {
    if (good)
      return val;
    return *(int*)0; // <----- етот
  }
};

Или лучше писать так:
struct Test {
  int val {};
  ...
  int& get_val(bool good) {
    if (good)
      return val;

    static int empty_val;
    return empty_val;
  }
};

Я понимаю что можно обойтись поинтерами на nullptr или std::optional, но всё равно интересно, не вызывает ли первый варик ошибок
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Ссылка - это как указатель, только она не может быть нулевой.
Поэтому никак нельзя вернуть *nullptr_t вместо ссылки на переменную, в отдельных случаях.

Вообще, у вас там разыменование нулевого указатяля, что есть UB и делать это категорически нельзя.

Второй пример ошибок не содержит, но очень странен. Возвращать ссылку на какую-то переменную, только для того, чтобы не переписывать нужное значение? Все с ног на голову перевернуто.

Вам лучше подойдут указатели.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы