我有以下代码;
#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
- 它具体做什么?它编译得很好,但我不确定。
- 这个我理解的很好,它将bSlog的成员ime1设置为 cSlog 结构中成员 ime2 的值。
- 由于某种原因无法编译,但与 1 相同。
最佳答案
aSlog = bSlog; // 1
aSlog
的每个成员都会被设置为bSlog
的对应值。这是一个浅拷贝,所以这个结构中的任何指针都将被设置为相同的值。由于 aSlog
和 bSlog
是同一类型,因此这是一个隐式复制赋值运算符。
bSlog.ime1 = cSlog.ime2; // 2
这会将 bSlog
的 ime1
成员设置为 cSlog
的 ime2
的值。这使用了 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/