如何引用构造函数?

时间:2019-05-07 10:25:37

标签: c++ constructor operator-keyword

我是C ++的新手,在学习它时遇到了这个问题

所以我创建了此类

class A {
    int num;
public:
    //constructor
    A(int num) {
        this->num = num;
    }
    int getNum() {
        return num;
    }
    //overload <<
    friend ostream& operator << (ostream& os,A& a) {
        os << a.getNum();
        return os;
    }
};

在主函数中,如果我使用cout<< A(1);则会编译错误(Visual Studio 2017中的代码C2679)。
如何使它像cout<< int(1);一样?我是否需要重载其他任何运算符?

2 个答案:

答案 0 :(得分:4)

您的重载需要使用const A&,否则匿名临时 A(1)无法与其绑定。

答案 1 :(得分:1)

另一种方法是使operator <<重载rvalue references

friend ostream& operator << (ostream& os, A&& a) {        
        os << a.getNum();
        return os;
    }