gpt4 book ai didi

c++ - 为什么在我分配该类的两个对象时调用我的构造函数?

转载 作者:可可西里 更新时间:2023-11-01 10:54:30 24 4
gpt4 key购买 nike

我很困惑,如果这是显而易见的,我很抱歉。以下是我错了吗:

 struct MyStruct
{
MyStruct(){};
MyStruct(MyStruct* arg){};
}

MyStruct(MyStruct* 参数){};构造函数是否将一个指向 MyStruct 的指针作为参数?

因为我有一个问题,当我这样做时,这个构造函数(我认为是)被调用了:

int main()
{
MyStruct obj;
MyStruct* objPtr;
obj = objPtr;

return 0;
}

当将 obj 分配给 objPtr 时,我希望编译器会提示,但它没有,而是调用 MyStruct(MyStruct* arg);我认为这是一个采用指针参数的构造函数。

如有任何帮助,我们将不胜感激。此外,如果我向类中添加一个复制赋值运算符,它仍然会发生。

编辑:感谢您的回答。看起来我对此有一些阅读要做,主题似乎是(对于任何想知道的人)在 C++ 中转换构造函数。我也在猜测 explicit 关键字。这是解释它的 SO 问题的链接:

What is a converting constructor in C++ ? What is it for?

最佳答案

  1. 编译器为你合成一个赋值运算符:

    MyStruct& MyStruct::operator=(MyStruct const&) = default;
  2. 当它看到分配时,它会为运算符找到一个候选者(这是它创建的)。然后它发现它可以使用您的构造函数进行转换,转换为允许赋值的类型 (MyStruct)。所以它归结为:

    obj = MyStruct (objPtr);

如果你想看到错误发生,将你的构造函数标记为显式:

struct MyStruct
{
MyStruct(){};
explicit MyStruct(MyStruct* arg){};
}

关于c++ - 为什么在我分配该类的两个对象时调用我的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com