Стандартный макет C ++ и ссылки

Согласно стандарту C ++:

Класс стандартного макета - это класс, который:

- не имеет нестатических элементов данных типа нестандартного класса (или массива таких типов) или ссылки.

Какие свойства ссылок препятствуют включению классов со ссылочными членами в определение стандартного класса макета?


person TRISAbits    schedule 13.04.2013    source источник
comment
Вы полагаете, что такие свойства должны существовать? Не должно быть ...   -  person Yakk - Adam Nevraumont    schedule 14.04.2013
comment
Предотвратить - сильное слово. С одной точки зрения, ссылки просто дают компилятору хороший повод рассматривать структуру как абстрактный тип данных, а не как. спецификация схемы хранения. Ссылки не обязательно должны иметь собственное хранилище вообще.   -  person jthill    schedule 14.04.2013


Ответы (1)


Стандартный класс макета - это четко определенный макет для определенного типа в памяти. В C ++ ссылки не являются объектами, поэтому у них нет хранилища, к которому можно получить доступ четко определенным способом соответствующей программой, даже несмотря на то, что реализация обычно должна иметь для них какое-то хранилище, специфичное для реализации.

По этой причине нет смысла иметь ссылочные элементы в чем-то, что должно иметь стандартный макет.

В стандарте в разделе о модели памяти C ++ есть ненормативное примечание, в котором упоминается следующее:

[Примечание: различные функции языка, такие как ссылки и виртуальные функции, могут включать дополнительные области памяти, которые недоступны для программ, но управляются реализацией. - конец примечания]

person CB Bailey    schedule 13.04.2013
comment
Спасибо за отличный ответ: в этом есть смысл. - person TRISAbits; 14.04.2013