我想知道标准对取消引用指向基址的指针的看法,但我在找到它方面没有任何进展。以这两个类为例:
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 类型的对象被取消引用,切片会发生在原地,还是会出现临时的?我倾向于认为临时不是一种选择,因为这意味着临时是抽象类的实例。
无论真相如何,我都将不胜感激任何指向 ISO 标准的指针。(或第三,就此而言。:))
编辑:
我提出了暂时不是一个选项的观点,作为一个可能的推理方式,为什么它会以它的方式运行,这很合乎逻辑,但我无法在标准中找到确认,而且我不是普通读者。
编辑2:
通过讨论,很明显我的问题实际上是关于取消引用指针机制,而不是关于拼接或临时。我感谢大家试图为我简化它,我终于得到了最让我困惑的问题的答案:为什么我在标准中找不到任何关于这个的东西......显然这是错误的问题,但我得到了正确的答案。
谢谢