int main() {
class A {
public:
static double test_code(const A& a);
};
class B : public A {
public:
B(int i) { };
static double test_code2(const B& b);
};
A::test_code(2);
B::test_code2(2);
return 0;
}
第一个方法调用不会编译,而第二个方法调用。有没有办法让这个转换工作?感谢
答案 0 :(得分:2)
不,隐式类型转换无法完成。这有多种原因,更简单的是,为了成为一个选项,编译器必须在调用地知道所有可能的扩展A
的类型,然后检查它们中的任何/所有类型是否可以从int
隐式转换,解决潜在的歧义...请注意,从给定类型扩展的所有类型是一个开放集,可以在当前后扩展翻译单位已经建成!
您可以通过不同的方式实现类似的功能,例如创建一个获取int
并返回A
对象的函数,或者显式创建B
。但它们都不允许隐式转换(即,不修改代码以明确请求转换路径)。
答案 1 :(得分:1)
编译好,
int main()
{
class A {
public:
A(int i)
{}
static double test_code(const A& a) { return 0.0; }
};
class B : public A {
public:
B(int i)
: A(i) {}
static double test_code2(const B& b) { return 0.0; }
};
A::test_code(2);
B::test_code2(2);
return 0;
}