如何创建可以初始化C++数据类型的类?

Aut*_*tAM 3 c++ overloading friend assignment-operator operator-keyword

标题基本上都说明了一切.我主要想这样做,这样我就可以创建一个对象(比如一个自定义字符串对象),可以初始化其他API中其他函数的参数.以下是我尝试使用自定义整数类的示例:

#include <iostream>
using namespace std;

class test
{
public:
    int member;
    test(int i) : member(i) {}

    friend int &operator=(int &i, test t);
};

int &operator=(int &i, test t)
{
   return (i = t.member);
}

int main()
{
    int i;
    test t = 90;

    cout << (i = t);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到一个错误,说operator =需要是一个成员函数.我理解C++标准的目标是防止赋值运算符的静态和非成员重载被实现,但有没有其他方法可以做到这一点?感谢您的任何帮助/建议!

man*_*nol 5

这不是使用赋值运算符,而是使用重载的类型转换.这将使您的主要功能像预期的那样工作:

#include <iostream>
using namespace std;

class test
{
public:
    int member;
    test(int i) : member(i) {}
    operator int() const {return member;}
};

int main()
{
    int i;
    test t = 90;

    cout << (i = t);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • +1,虽然`operator int()`应该是`const`,而`test(int)`更安全(虽然有时不太方便 - `test t = 90`)如果`explicit`. (2认同)