Мне бы хотелось узнать стандартное представление разыменования указателя на базу, но я не делаю никакого прогресса в его поиске.Возьмем, к примеру, эти два класса:
class Base
{
public:
virtual void do_something() = 0;
};
class Derived : public Base
{
public:
virtual void do_something();
};
void foo2(Base *b)
{
Base &b1 = *b; // how this work by standard?
}
void foo()
{
Derived *d = new Derived();
foo2(d); // does this work by standard?
}
Итак, в принципе, если разыменовать указатель типа B на объект типа D, произойдет ли нарезка на месте или возникнет временный объект?Я склонен полагать, что временное не вариант, потому что это означало бы, что временное является экземпляром абстрактного класса.
Независимо от правды, я был бы признателен за любые указатели на стандарт ИСО, который говорит один или другой,(Или третий, если на то пошло. :))
РЕДАКТИРОВАТЬ:
Я бросил точку с временным отсутствием выбора в качестве возможной линии рассуждения, почему он ведет себя так, как он,вполне логично, но я не могу найти подтверждение в стандарте, и я не постоянный читатель.
EDIT2:
В ходе обсуждения стало очевидно, что мой вопрос на самом деле касался разыменованиямеханизм указателя, а не о сращивании или временных.Я благодарю всех за то, что они пытались обдумать это для меня, и я наконец-то получил ответ на вопрос, который меня больше всего озадачил: почему я не могу найти ничего в стандарте по этому поводу ... Очевидно, это был неправильный вопрос, но яполучил правильный ответ.
Thnx