c++ - 当我们在两个结构上使用 = 运算符时,它会做什么?

标签 c++ struct

我有以下代码;

#include <iostream>

using namespace std;

struct Slog1
{
    char ime1;
    int broj1;
};

struct Slog2
{
    char ime2;
    int broj2;
};
int main()
{
    Slog1 aSlog, bSlog;
    Slog2 cSlog;

    aSlog = bSlog; // 1
    bSlog.ime1 = cSlog.ime2; // 2
    aSlog = cSlog; // 3

}

现在,我宣布:

Slog1 aSlog, bSlog;
Slog2 cSlog;

那些是我非常了解的结构变量。现在我有这些:

aSlog = bSlog; // 1
bSlog.ime1 = cSlog.ime2; // 2
aSlog = cSlog; // 3
  1. 它具体做什么?它编译得很好,但我不确定。
  2. 这个我理解的很好,它将bSlog的成员ime1设置为 cSlog 结构中成员 ime2 的值。
  3. 由于某种原因无法编译,但与 1 相同。

最佳答案

aSlog = bSlog; // 1

aSlog的每个成员都会被设置为bSlog的对应值。这是一个浅拷贝,所以这个结构中的任何指针都将被设置为相同的值。由于 aSlogbSlog 是同一类型,因此这是一个隐式复制赋值运算符。

bSlog.ime1 = cSlog.ime2; // 2

这会将 bSlogime1 成员设置为 cSlogime2 的值。这使用了 char 的复制赋值运算符。

aSlog = cSlog; // 3

这不应该编译,因为这段代码中没有任何内容告诉编译器如何将 Slog1 类型转换为 Slog2 类型。您将需要一个转换构造函数(一个在 Slog1 中声明的构造函数,它接受一个 Slog2 参数)。

struct Slog2
{
    char ime2;
    int broj2;
};

struct Slog1
{
    char ime1;
    int broj1;
    // ...
    // conversion-constructor
    Slog1(const Slog2& s2) : ime1(s2.ime2), broj1(s2.broj2)
    { }
    // copy-assignment conversion
    Slog1& operator=(const Slog2& s2)
    {
        ime1 = s2.ime2;
        broj1 = s2.broj2;
        return *this;
    }
};

关于c++ - 当我们在两个结构上使用 = 运算符时,它会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768274/

相关文章:

c - 不确定如何将整数从文件存储到 c 中的结构

c - 将文件中的数据分解为结构体

c++ - managed_shared_memory 与 windows_shared_memory

c++ - 编译器错误 : 'expected unqualified-id before "using '''

c++ - 使用数组而不是 std::vector 的优点?

c - 如何在C中实现二维结构数组

scala - 在Spark 2中获取CastClassException:java.lang.ClassCastException:java.util.ArrayList无法转换为org.apache.hadoop.io.Text

c++ - 如何准确知道用户何时展开 QTreeView 项目?

python - pybind module.obj : error LNK2001: unresolved external symbol

c - 关于动态分配内存给 char 指针的简单问题