gpt4 book ai didi

指针的 C++ 转换运算符

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:05 26 4
gpt4 key购买 nike

我尝试了以下代码示例,但 A* aa = c;不编译。为什么不调用转换运算符?没有指针的相同示例有效。所以不知道为什么C一定要继承A?感谢您的帮助。

编辑:我知道编写这样的代码毫无意义。但我只想了解转换的内容。

#include <iostream>

using namespace std;

class A {
public:
int mValue = 0;
};

class B : public A{
public:
operator A*() {
return this;
}
};

class C {
public:
operator A*() {
return new A();
}
};

int main(int argc, char* argv[])
{
B* b = new B();
A* a = b;

C* c = new C();
A* aa = c;
}

最佳答案

因为表达式 c 的类型是 C*,而不是 C,这是调用转换运算符所必需的。 C*A* 是不相关的类型,它们之间不存在转换。

A* aa = *c;

会起作用。

A* a = b; 之所以有效,是因为从派生类指针到基类指针的转换是合法且隐式的(请注意,它不会调用转换运算符)。

关于指针的 C++ 转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com