Zeb*_*ish 1 c++ windows constructor visual-studio
我很困惑,如果这很明显,我很抱歉.我错了以下内容:
struct MyStruct
{
MyStruct(){};
MyStruct(MyStruct* arg){};
}
Run Code Online (Sandbox Code Playgroud)
MyStruct(MyStruct*arg){}; 是一个构造函数,将一个指向MyStruct的指针作为参数?
因为我有一个问题,当我这样做时,这个构造函数(我认为是)被调用:
int main()
{
MyStruct obj;
MyStruct* objPtr;
obj = objPtr;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将obj分配给objPtr时我希望编译器抱怨,但它不会,而是调用MyStruct(MyStruct*arg); 我认为这是一个采用指针参数的构造函数.
任何帮助,将不胜感激.此外,如果我在课程中添加了一个复制赋值运算符,它仍会发生.
编辑:谢谢你的回答.看起来我已经有了一些关于这个的阅读,主题似乎是(对于任何想知道的人)在C++中转换构造函数.我也猜测显式关键字.这是一个解释它的SO问题的链接:
编译器为您合成赋值运算符:
MyStruct& MyStruct::operator=(MyStruct const&) = default;
Run Code Online (Sandbox Code Playgroud)当它看到赋值时,它会找到运算符的候选者(它是它创建的候选者).然后它看到它可以使用你的构造函数进行转换,转换为允许赋值(MyStruct)的类型.所以归结为:
obj = MyStruct (objPtr);
Run Code Online (Sandbox Code Playgroud)如果要查看错误发生,请将构造函数标记为显式:
struct MyStruct
{
MyStruct(){};
explicit MyStruct(MyStruct* arg){};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |