最近,我浏览了O'Reilly Media的C++ Pocket Reference拷贝,当我遇到关于用户定义类型的用户定义转换的简短部分和示例时,我感到很惊讶:

#include <iostream>

class account {

    private:
        double balance;

    public:
        account (double b) { balance = b; }

        operator double (void) { return balance; }
};

int main (void) {

    account acc(100.0);
    double balance = acc;

    std::cout << balance << std::endl;

    return 0;
}

我已经用C++编程了一段时间了,这是我第一次看到这种运算符重载。这本书对这个主题的描述有些简短,这给我留下了一些有关此功能的未解之谜:
  • 这是一个特别晦涩的功能吗?就像我说的那样,我已经使用C++编程了一段时间了,这是我第一次遇到这种情况。我没有太多运气能找到关于此的更深入的 Material 。
  • 这是相对便携式的吗? (我在GCC 4.1上进行编译)
  • 是否可以将用户定义的类型转换为用户定义的类型?例如

    运算符std::string(){/*代码*/}
  • 最佳答案



    是的,不经常使用转换运算符。我见过的地方是针对用户定义的类型的,这些类型可能会降级为内置的类型。像固定精度数字类这样的东西,它支持与原子序数类型之间的相互转换。



    据我所知。他们已经永远成为标准。



    是的,那是构造函数的功能之一。使用单个参数的构造函数可以有效地创建一个从参数类型到类类型的转换运算符。例如,如下所示的类:

    class Foo {
    public:
        Foo(int n) {
            // do stuff...
        }
    }
    

    让我们来做:
    Foo f = 123;
    

    如果您以前使用过std::string,很可能是您在没有意识到的情况下使用了此功能。 (顺便说一句,如果要防止此行为,请使用explicit声明任何单参数构造函数。)

    关于c++ - 用户定义的C++转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3008690/

    10-08 21:14