c++ - 在声明中为类赋值不编译

标签 c++ initialization variable-assignment

我想在声明时给一个类赋值,所以我制作了这个基本类:

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

并用这个 main 编译它:

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

但是编译器提示这个错误信息:

no viable conversion from 'int' to 'A'

    A x = 1;
      ^   ~

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

int main(void)
{
    A x;

    x = 1;
}

一切顺利编译


为什么我的第一个主程序不编译,我如何更改类 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

关于c++ - 在声明中为类赋值不编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315087/

相关文章:

C 中的复合语句表达式

c++ - 正在初始化.. 哪个更有效率?

c++ - 在 DWORD 中设置特定字节

c++ - Langford 序列 - 利用对称性/去除对称性

c++ - 在类的构造函数中初始化一个二维 vector

algorithm - 通路/道路铺设问题

Java - char、int 转换

javascript - innerHTML 上的错误分配替换

c++ - 将派生类推送到c++中基类的 vector

c++ - 在 C++ 中定义类枚举值的 std::vector 的缩写语法