Я понимаю это, однако я не понимаю, для чего будет полезна такая структура, если вы даже не можете объявить переменную ее типа. Может ли такой тип данных быть полезным в каком-то конкретном случае?
Удаление неявно используемого по умолчанию конструктора не означает, что вы никогда не сможете использовать этот тип. Это означает, что вы должны определить конструктор самостоятельно, потому что только вы, программист, можете знать, к чему должна быть привязана эта ссылка. Таким образом, компилятор оставляет это на ваше усмотрение, и если вы забудете, вы получите уведомление о том, что c'tor удален.
Вот почему он удален, но, как уже упоминалось, это само по себе не означает, что вы не можете использовать эту структуру как есть. Все еще возможно агрегировать его инициализацию (однако это невозможно, если бы у него были частные элементы данных, так что это тоже нужно учитывать).
Простым вариантом использования может быть псевдоним членов. Например (это своего рода игрушечный пример, вы можете вместо этого использовать инициализаторы членов по умолчанию):
struct Point {
double coord[3];
double& x;
double& y;
double& z;
Point() : x(coord[0]), y(coord[1]), z(coord[2]) {}
};
Ссылочные члены также означают, что вам потребуется предоставить определения для других функций-членов, чтобы обеспечить правильную работу ваших объектов, поскольку они несколько усложняют ситуацию. Вот почему их обычно избегают.
Другое использование не может быть исчерпывающе перечислено.