小编Col*_*oTV的帖子

返回子类的const引用

我知道的

我知道返回一个临时对象的const引用是可以的!(像这个例子:)

class A {
public:
  virtual const A& clone () { return (A()); }
  virtual std::string name() const { return ("A"); }
};
Run Code Online (Sandbox Code Playgroud)

返回临时对象并绑定到const引用

但!

如果我想这样做,它仍然是正确的:

class B : public A {
public:
  virtual const A& clone () { return (B()); }
  virtual std::string name() const { return ("B"); }
};
Run Code Online (Sandbox Code Playgroud)

我认为是的,但在执行时,返回的对象仍被视为A对象(如本例:)

main.cpp中

#include <iostream>
#include <string>
int main() {
  B bb;
  A* aa = &bb;

  std::cout << aa->clone().name() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

产量

valgrind ./a.out
==14106== Use of uninitialised …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance const-reference

6
推荐指数
1
解决办法
550
查看次数

标签 统计

c++ ×1

const-reference ×1

inheritance ×1