首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我们在两个结构上使用=运算符时,它会做什么?

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

Stack Overflow用户
提问于 2013-12-25 01:16:27
回答 5查看 335关注 0票数 3

我有以下代码;

代码语言:javascript
复制
#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

}

现在,我宣布:

代码语言:javascript
复制
Slog1 aSlog, bSlog;
Slog2 cSlog;

这些都是结构变量,我非常理解。现在我有了这些:

代码语言:javascript
复制
aSlog = bSlog; // 1
bSlog.ime1 = cSlog.ime2; // 2
aSlog = cSlog; // 3
  1. 它到底是做什么的?它编译得很好,但我不确定它有。
  2. 这个我非常理解,它设置了成员ime1 of bSlog -- cSlog结构中成员ime2的值。
  3. 由于某种原因不编译,但与1相同。
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-25 01:22:12

代码语言:javascript
复制
aSlog = bSlog; // 1

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

代码语言:javascript
复制
bSlog.ime1 = cSlog.ime2; // 2

这将将bSlogbSlog成员设置为cSlogime2值。这将使用char的复制赋值操作符。

代码语言:javascript
复制
aSlog = cSlog; // 3

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

代码语言:javascript
复制
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;
    }
};
票数 8
EN

Stack Overflow用户

发布于 2013-12-25 01:22:12

Slog1Slog2是完全不相关的类型。无论您给它们相同的布局,编译器都会拒绝从另一个中分配一个,只要您没有提供显式的转换构造函数/赋值操作符/ cast运算符

票数 3
EN

Stack Overflow用户

发布于 2013-12-25 01:26:53

代码语言:javascript
复制
aSlog = bSlog; // 1

您没有为类Slog1重载赋值操作符,因此这使用隐式声明和隐式定义的赋值运算符成员函数。隐式定义的赋值运算符执行一个浅拷贝。

代码语言:javascript
复制
aSlog = cSlog; // 3

Slog1Slog2是不相关的,所以这不会按-是因为您没有定义执行此分配的机制而编译。您可以使用类Slog1中的赋值操作符作为参数接收Slog2,在类Slog1中使用转换构造函数以Slog2作为参数,或者使用类Slog2中的operator Slog1生成Slog1作为输出。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20768274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档