【发布时间】:2012-09-06 20:53:19
【问题描述】:
我有以下测试程序(展示了我真正想要完成的事情)。
有谁知道如果没有 reinterpret_cast以下是否可行?
struct B;
struct A {
A() { }
A( const B &b) { }
A( const B *b) { }
A( B *b) { }
A* operator=(const B *b) { }
A* operator=(B *b) { }
};
struct B {
B() { }
B( const A &a) { }
B( const B * b) { }
B( B *b) { }
B* operator=(const A *a) { }
B* operator=(A *a) { }
};
int main(int argc, char *argv[])
{
A *a = new A();
B *b = new B();
A *c = b;
return 0;
}
我尝试了所有我能做的转换运算符,但我似乎无法得到
A *c = b;
不要抱怨
error C2440: 'initializing' : cannot convert from 'B *' to 'A *'
【问题讨论】:
-
你可以从
A中制作Binherit。否则指针转换并没有多大意义。 -
这是一个人为的例子,但在我正在处理的生产代码中,A 和 B 可以通过转换构造函数进行转换(通过参考)
-
但它们是完全不同的类型。把一个当作是另一个是没有意义的。
-
A cast 是您在源代码中编写的内容;它告诉编译器进行转换。因为它包含在源代码中,所以没有隐式转换这样的东西。然而,有诸如隐式转换之类的东西。
-
您可以通过引用来完成。引用可以隐式转换
标签: c++ pointers casting implicit