[英]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.