【问题标题】:Implement POD to Custom Class type casting实现 POD 到自定义类类型转换
【发布时间】:2013-06-05 11:30:49
【问题描述】:

实现从自定义类到 POD 或其他类型的转换非常简单。它在自定义类本身中实现为以目标类型命名的运算符。像这样,

operator int{ return anInt; }

反过来呢?例如,我可以将 int 重载为自定义类类型转换吗?

【问题讨论】:

    标签: c++ overloading


    【解决方案1】:

    你可以,但你做的不同,为你的类提供一个以基本类型作为参数的构造函数:

    class X { 
    public:
       X(int) {}
    };
    
    void f(X const &x) { }
    
    int main(){ 
        f(2); // allowed -- will construct an X, then pass it to `f`.
    }
    

    请注意,在某些情况下,这可能会导致意外转换 - 通常认为最好将此类构造函数标记为 explicit 以防止它们被使用,除非您明确强制转换。

    【讨论】:

    • 如果我这样实现呢?我可以简单地做: MyCustomClass 对象;对象 = 2;这会调用初始化程序然后复制构造函数?
    • @ShaneHsu:不。MyCustomClass object = 2; 将使用构造函数,但作为一个独立的语句,object = 2; 是一个赋值,它将使用重载的赋值运算符。
    • 我明白了,这个怎么样? MyCustomClass object = (MyCustomClass)(2) 会调用什么,或者只是编译器错误?
    • @ShaneHsu:应该可以找到并使用转换构造函数(尽管MyCustomClass 2 周围的括号就足够了——你不需要两者都需要) .
    【解决方案2】:

    使用单参数构造函数

    MyClass(int n) :anInt(n) {}
    

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 2013-11-11
      • 2022-11-23
      相关资源
      最近更新 更多