C++ 转换构造函数不需要';我不接受大括号的列表

C++ 转换构造函数不需要';我不接受大括号的列表,c++,constructor,braces,list-initialization,C++,Constructor,Braces,List Initialization,因此,当我与构造函数打交道时,我编写了以下代码: class super { public: int duper, duperer; friend ostream& operator << (ostream&, super&); friend super operator+ (super& uno, super& dos); friend int main(); super() {}; super(int); super(int, int);

因此,当我与构造函数打交道时,我编写了以下代码:

class super
{
public:
int duper, duperer;

friend ostream& operator << (ostream&, super&);
friend super operator+ (super& uno, super& dos);
friend int main();
super() {};
super(int);
super(int, int);
};

ostream& operator << (ostream& out, super& Sout)
{
    cout << "The " << Sout.duper << " and the " << Sout.duperer << " are super!" << endl;
    return out;
}

super operator+ (super& uno, super& dos)
{
    return { uno.duper + dos.duper , uno.duperer + dos.duperer };
}


super::super(int duper) : duper(duper) {};
super::super(int dupster, int pupster) : duper(pupster), duperer(dupster)     {};

int main()
{

super Supper = { -1, 0 }, Copper(1, 1);
Supper = super(3, 3) + Copper;
cout << Supper << "!!!\n";
}
class超级
{
公众:
int-duper,duperer;

friend ostream&operator“一切正常”——不,它不会。如果你的编译器真的编译了你所说的“正常工作”那么这一定是编译器中的错误。临时值不会绑定到可变引用。这与构造函数无关。您的
运算符+
已损坏。在您显示的两段代码中,
运算符+
必须将
常量
引用作为参数,而不是不绑定到的可变引用MSVC确实编译了这段代码,但至少给出了一条警告消息。gcc和clang都是barf。请编辑您的问题以包含一个。
class super
{
public:
int duper, duperer;

friend ostream& operator << (ostream&, super&);
friend super operator+ (super& uno, super& dos);
friend int main();
super() {};
super(int);
super(int, int);
};

ostream& operator << (ostream& out, super& Sout)
{
    cout << "The " << Sout.duper << " and the " << Sout.duperer << " are super!" << endl;
    return out;
}

super operator+ (super& uno, super& dos)
{
    return { uno.duper + dos.duper , uno.duperer + dos.duperer };
}


super::super(int duper) : duper(duper) {};
super::super(int dupster, int pupster) : duper(pupster), duperer(dupster)     {};

int main()
{

super Supper = { -1, 0 }, Copper(1, 1);
Supper = {3, 3} + Copper;
cout << Supper << "!!!\n";
}