2
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;

}

参看:http: //ideone.com/ilfE8

第一个方法调用不会编译,而第二个会。有没有办法使这种转换工作?谢谢

4

2 回答 2

2

不,这不能用于隐式类型转换。这有多种原因,更简单的是,如果要让它成为一个选项,编译器必须在调用位置知道所有可能扩展的类型,A然后检查它们是否可以从 隐式转换int,解决潜在的歧义......请注意,从给定类型扩展的所有类型都是一个开放集,可以在当前翻译单元构建后扩展!

您可以通过不同的方式实现类似的功能,例如创建一个接受int并返回A对象的函数,或显式创建B. 但是它们都不允许隐式转换(即不修改代码以显式请求转换的路径)。

于 2012-09-28T16:17:02.143 回答
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;
}
于 2012-09-28T16:09:42.170 回答