Возможно ли присвоить «ничего» в ссылку?

Ссылка скопирована
C#
1 ответ

Опишу задачу:
1. Есть поле структуры, ну допустим ref. Оно хранит ссылку на какую либо переменную.
2. Изначально переменная должна быть пустой, а в конструктор структуры должна приходить ссылка на переменную, и присваиваться в ref

Есть ли какой то способ сделать это? Или любой аналог - главное: инициализировать ссылку;

template<typename T> struct Test {     T& ref;  // нужно присвоить null      Test(const T& _ref) : ref(_ref) = default; }

template<typename T> struct Test { T& ref; // нужно присвоить null Test(const T& _ref) : ref(_ref) = default; }

ps: может даже не структура, а класс

Дополнительно:

Ссылки в С++ - это синтаксический сахар над указателями.
Созданный ради устранения проблемы разыменования нулевого указателя.
Собственно, именно отсутствием озвученной возможности ссылка от указателя и отличается.

Если ваша логика подразумевает пустой объект - ну, запрограммируйте пустой объект этого класса (то есть такой, который будет отличаться от заполненных). А бороться с языком - не надо.

Примерно то, что вам нужно - можно. Только ссылки никогда не бывают нулевыми. Поэтому вам надо во всех конструкторах класса ссылку чем-то инициализировать.

В вашем коде 2 проблемы. = default; можно писать, если у вас нет никакого списка инициализации. И константную ссылку нельзя использовать для инициализации неконстантной.

Вот такой код компилируется:

template<typename T> struct Test {     T& ref;  // нужно присвоить null      Test(T& _ref) : ref(_ref) {}; };

template<typename T> struct Test { T& ref; // нужно присвоить null Test(T& _ref) : ref(_ref) {}; };

  • Тут кстати нету проблем с компиляцией, просто как пример
  • Евгений Мартынов,

    Тут кстати нету проблем с компиляцией

    Да ладно:

    error: expected ‘{’ before ‘=’ token    16 |     Test(const T& _ref) : ref(_ref) = default;

    error: expected ‘{’ before ‘=’ token 16 | Test(const T& _ref) : ref(_ref) = default;

  • Wataru, ну это как пример)) повторюсь, тут суть не в том
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно