【发布时间】:2021-01-27 18:53:21
【问题描述】:
我有一个关于隐式构造函数的问题。 所以假设我有以下场景:
struct MyStruct1 {
bool myBool1 = false;
bool myBool2 = false;
MyStruct1() = default;
MyStruct1(bool val)
: myBool1(val)
, myBool2(val)
{}
};
struct MyStruct2 {
MyStruct1 myStruct1;
};
现在我想知道下面的 1 和 2 是否等价:
1)
int main() {
MyStruct2 myStruct2;
myStruct2.myStruct1 = true;
}
int main() {
MyStruct2 myStruct2;
myStruct2.myStruct1 = MyStruct1{true};
}
这就是隐式构造函数的工作原理吗? 或者这里还有其他什么在起作用?
【问题讨论】:
-
我觉得这一定是某些东西的副本,但我还不能完全找到它......但无论哪种方式,是的,这基本上是隐式构造的工作原理。唯一需要注意的是,在这两种情况下,您都在使用 assignment,这会强制从
MyStruct1调用构造函数 -
万一你不知道cppinsights,这是一个非常方便的网站,可以解决这类问题。
-
在这种情况下是的——但如果
MyStruct1有一个explicit构造函数或重载的赋值运算符会有所不同 -
@florestan 谢谢你,这是一个很好的资源。
标签: c++ constructor implicit-conversion