在声明中为类赋值不会编译

The*_*ton 2 c++ initialization variable-assignment

我想在声明中为类分配一个值,所以我创建了这个基本类:

class   A
{
public:
    A   &operator=(int)
    {
        return (*this);
    }
};
Run Code Online (Sandbox Code Playgroud)

并用这个main编译它:

int main(void)
{
    A x = 1;
}
Run Code Online (Sandbox Code Playgroud)

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

no viable conversion from 'int' to 'A'

    A x = 1;
      ^   ~
Run Code Online (Sandbox Code Playgroud)

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

int main(void)
{
    A x;

    x = 1;
}
Run Code Online (Sandbox Code Playgroud)

一切顺利编译


为什么我的第一个主要不编译,如何更改类A以便编译?

son*_*yao 7

A x = 1;是初始化,而不是赋值; 他们是不同的东西.它不会调用赋值运算符,但需要转换构造函数.

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

    A   &operator=(int)
    {
        return (*this);
    }
};
Run Code Online (Sandbox Code Playgroud)

然后

A x = 1; // initialize x via converting constructor
x = 2;   // assign x via assignment operator
Run Code Online (Sandbox Code Playgroud)