C 11 移动构造函数未调用,首选默认构造函数
问题:
在 C 中11、当通过另一个对象实例化一个对象时,为什么应该调用的移动构造函数却没有被调用?
答案:
实例化时,编译器可能偶尔会调用应用一种称为复制省略的技术。复制省略允许直接将临时对象构造到要复制或移动到的目标中,绕过复制或移动构造函数/析构函数对。
标准允许在以下情况下进行复制省略:
在给定的示例中,当用 X("test") 实例化 z 时,会发生复制省略,因为它被视为尚未绑定的临时对象一个参考。因此,它被直接构造到 z 中,绕过移动构造函数并使用默认构造函数构造 z。
显式调用 move(X("test")) 可防止复制省略并强制使用移动构造函数,如修改后的输出所示。
以上是为什么在用另一个对象实例化一个对象时不调用 C 11 移动构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!