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

use*_*407 2 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

}
Run Code Online (Sandbox Code Playgroud)

现在,我宣布:

Slog1 aSlog, bSlog;
Slog2 cSlog;
Run Code Online (Sandbox Code Playgroud)

这些是结构变量,我很清楚.现在我有这些:

aSlog = bSlog; // 1
bSlog.ime1 = cSlog.ime2; // 2
aSlog = cSlog; // 3
Run Code Online (Sandbox Code Playgroud)
  1. 它究竟做了什么?它编译得很好,但我不确定.
  2. 我很清楚这一点,它将bSlog的成员ime1设置为cSlog结构中成员ime2的值.
  3. 由于某种原因不编译,但它与1相同.

Zac*_*and 8

aSlog = bSlog; // 1
Run Code Online (Sandbox Code Playgroud)

每个成员都aSlog将被设置为相应的值bSlog.这是一个浅表副本,因此可能在此结构中的任何指针都将设置为相同的值.由于aSlogbSlog是相同的类型,这是一个隐式的复制赋值运算符.

bSlog.ime1 = cSlog.ime2; // 2
Run Code Online (Sandbox Code Playgroud)

这会将ime1成员bSlog的值设置ime2cSlog.这使用了复制赋值运算符char.

aSlog = cSlog; // 3
Run Code Online (Sandbox Code Playgroud)

这不应该编译,因为此代码中没有任何内容告诉编译器如何将类型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;
    }
};
Run Code Online (Sandbox Code Playgroud)