在声明中赋值 class 不编译

assigning class a value on declaration does not compile

我想在声明时为 class 分配一个值,所以我做了这个基本的 class:

class   A
{
public:
    A   &operator=(int)
    {
        return (*this);
    }
};

并用这个主要编译它:

int main(void)
{
    A x = 1;
}

但编译器抱怨此错误消息:

no viable conversion from 'int' to 'A'

    A x = 1;
      ^   ~

但是当我用这个 main 编译时:

int main(void)
{
    A x;

    x = 1;
}

一切顺利编译


为什么我的第一个主程序无法编译,我该如何更改 class A 以便编译?

A x = 1;是初始化,不是赋值;他们是不同的东西。它不调用赋值运算符,但需要 converting constructor

class   A
{
public:
    // converting constructor
    A (int) {} 

    A   &operator=(int)
    {
        return (*this);
    }
};

然后

A x = 1; // initialize x via converting constructor
x = 2;   // assign x via assignment operator