当我了解其他人的代码时,我在项目中遇到一个问题,我发现了一种怪异的方式来将int值分配给一个结构:
TestStruct ts = TestStruct(3004);
在Teststruct中,还有另一个子结构SS。 SS只有一个int类型的成员。 (当然,原始代码与下面的代码不同)。 我试图在Windows平台上的vs代码中理解这一点。 下面的代码类似于我的项目之一
我的问题是:
---更新:现在我知道这里使用的方式称为转换 构造函数。 int-> struct-> int,对吗?
。
TestStruct() = default;
TestStruct(const TestStruct&) = default;
TestStruct& operator=(const TestStruct&) = default;
TestStruct(TestStruct&&) = default;
TestStruct& operator=(TestStruct&&) = default;
测试代码如下:
// 03_2 struct constructor.cpp
#include <iostream>
using namespace std;
typedef struct subStruct {
int si;
subStruct(const int si_) : si(si_){ //compile error if no this constructor
}
}SS;
struct TestStruct {
SS ss;
//constructor and operator overload
TestStruct(const SS ss_) : ss(ss_) {
}
TestStruct() = default;
TestStruct(const TestStruct&) = default;
TestStruct& operator=(const TestStruct&) = default;
TestStruct(TestStruct&&) = default;
TestStruct& operator=(TestStruct&&) = default;
};
int main(int argc, char const *argv[])
{
TestStruct ts = TestStruct(3004);
return 0;
}
答案 0 :(得分:3)
这怎么可能?将一个int值分配给一个结构
您为struct
提供了一个int
的构造函数:
struct SS {
int si;
SS(int si) : si{ si } {}
};
因此int
文字
TestStruct ts = TestStruct(3004);
可以转换为SS
,并传递给您
TestStruct(const SS ss_) : ss(ss_) {}
答案 1 :(得分:0)
为了完整起见,如果“结构”是聚合的,则可以简单地使用括号初始化:
struct SS {
int si;
};
struct TestStruct {
SS ss;
};
int main()
{
TestStruct ts = TestStruct{3004};
}