左值引用取消引用

  • 本文关键字:引用 取消 c++
  • 更新时间 :
  • 英文 :


假设编译了以下代码:

int main()
{
A* p = new B();     // 1
C& c = p->method(); // 2
*c = *p;            // 3
c = *p;             // 4
}

给定存在not期望类ABC的单个operator=,并且no将单个强制转换运算符转换为这些运算符中的任何运算符。

B有可能从A继承C吗?第3行和第4行怎么可能同时编译?

此行

*c = *p

如果不重载CCD_ 10的CCD_。引用虽然与指针有很多相似之处,但不是指针。它们不是内存地址,因此不能取消引用。相反,它们充当指针,无论何时使用,都会自动取消引用。此外,不能重新分配引用以指向不同的对象,因此,尽管如果将代码更改为c = *p,代码会编译,但它不会按预期工作。CCD_ 12将仍然指向CCD_ 13返回的对象。

如果将c设置为指向C的指针而不是引用,并删除第4行,则可能会出现您所描述的ABC之间的关系。代码看起来是这样的:

int main()
{
A* p = new B(); // works because B inherits from A
C* c = p->method(); // works because is "method" is a member function
// of A and returns a pointer to an instance of C
c* = *p;            // works because A inherits from C
}

最新更新