繁体   English   中英

无法使用base clase rvalue初始化指向子类的指针

[英]Cannot initialize pointer to a subclass with base clase rvalue

我对C ++考试中的问题有疑问。 我和一位助教有很多争执,我想知道,如果我错过了什么。

给出以下代码:

class Student {
public:
  virtual void checkFinanes() {
    std::cout << "I have no money. \n";
  }
};

class ExonomyStudent : public Student {
public:
  virtual void checkFinances() {
    std::cout << "I am making a lot of money.\n";
  }
};

问题是:

以下代码是否编译? 如果是这样,当我需要时,控制台上的输出是什么。 如果没有,为什么不呢?

Student student;
student.checkFinances();
EconomyStudent* economyStudent = &student;
economyStudent->checkFinances();

答案应该是:

不编译。 无法使用学生rvalue初始化EconomyStudent *。

我知道并理解,不能初始化指向子类的指针和baseclase对象的地址,并且这不能编译。 我不明白的是右值。 声明rvalue以使答案有效是否真的很重要? 我的助教坚持但我不这么认为。 你怎么看?

声明rvalue以使答案有效是否真的很重要?

我不这么认为。 检查您尝试使用左值初始化EconomyStudent *economyStudent的情况:

 Student student;
 student.checkFinances();
 Student *lvalue = &student;
 EconomyStudent* economyStudent = lvalue;

clang抱怨我的机器,说明这一点

错误:无法使用“Student *”类型的左值初始化“EconomyStudent *”类型的变量

因此,编译器输出方面的唯一区别是rvalue与lvalue。 由于值类别与代码段中的错误类型无关,您可以告诉您的助教,互联网上的一些随机用户认为您是对的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM