Часть объекта или ссылки

Предполагая, что класс A имеет переменную-член (которая является объектом, а не ссылкой) m. Естественно, я буду думать, что:
Когда я определил объект «o1», то выражение «o1.m» также является типом объекта;
Когда я определил ссылку ‘q1’, выражение ‘q1.m’ также является ссылочным типом.

Это заключение правильно? Мне интересно, какие относительные предложения есть в стандартном документе C ++, если это правда (я искал их / их уже в течение еще одного дня, но до сих пор получил почти все о ‘ссылке как члене класса’)?

0

Решение

Взгляни на §5.2.5 (Доступ участника класса в Постфиксные выражения, от N3797 C ++ 14 Draft):

Аббревиатура postfix-expression.id-expression как E1.E2, E1 называется выражением объекта. Тип и категория значения E1.E2 определяются следующим образом. В оставшейся части 5.2.5 cq обозначает либо const, либо отсутствие const, а vq обозначает либо volatile, либо отсутствие volatile. резюме представляет
произвольный набор cv-квалификаторов, как определено в 3.9.3.

Если объявлено, что E2 имеет тип «ссылка на T», то E1.E2 является lvalue; тип E1.E2 — T. В противном случае,
применяется одно из следующих правил.

  • Если E2 является нестатическим членом данных, а тип E1 — «cq1 vq1 X», а тип E2 — «cq2 vq2 T», выражение обозначает именованный член объекта, обозначенный первым выражением. Если E1 является lvalue, то E1.E2 является lvalue; в противном случае E1.E2 является значением xvalue. Пусть обозначение vq12 обозначает «объединение» vq1 и vq2; то есть, если vq1 или vq2 энергозависимы, то vq12 энергозависим. Аналогично, пусть обозначение cq12 обозначает «объединение» cq1 и cq2; то есть, если cq1 или cq2 является const, то cq12 является const. Если E2 объявлен как изменчивый член, то тип E1.E2 — «vq12 T». Если E2 не объявлен как изменяемый член, то тип E1.E2 — «cq12 vq12 T».

Стандарт ничего не говорит о том, что E2 станет ссылкой, даже если E1 есть. Чтобы быть явным, если E1 является ссылочным типом, а E2 — нет, E1.E2 не является ссылочным типом.

2

Другие решения


По вопросам рекламы [email protected]