2017-02-09 5 views
0

Я передаю ссылки на указатели, чтобы использовать виртуальные функции.Передача ссылки на указатели

Вариант 1 делает то, что я намеревался, и вызывает соответствующую производную класс виртуальной функции. Вариант 2 не означает, что никакая ссылка не была передана. Так как это компилируется, то что означает & в этом контексте, если не пройти по ссылке?

1. 
Derived aDerived; 
Derived *pDerived = &aDerived; 

2. 
Derived *pDerived = &Derived(); 
+3

Вариант 2 не должен составлять в стандартном C++. Кроме того, вы нигде не передаете ссылки на указатели. – juanchopanza

+2

Зачем вам нужно «передавать ссылки на указатели, чтобы использовать виртуальные функции»? – tadman

+1

В вашем первом примере '&' является оператором 'address-of', он не имеет никакого отношения к ссылкам. – Barmar

ответ

1

В варианте 2 вы пытаетесь взять адрес в rvalue. Это должно не компилировать с:

error: lvalue required as unary ‘&’ operand

Check this live example.

+0

Спасибо - пересмотренный уровень предупреждения VS до 4, и он показал в основном то, что вы упомянули. – cafekaze

Смежные вопросы