gpt4 book ai didi

c++ - 自动生成默认/复制/移动构造函数和复制/移动赋值运算符的条件?

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:26 26 4
gpt4 key购买 nike

我想重温一下编译器通常会自动生成默认构造函数、复制构造函数和赋值运算符的条件。

我记得有一些规则,但我不记得了,也无法在网上找到有信誉的资源。谁能帮忙?

最佳答案

在下文中,“自动生成”是指“隐式声明为默认,但未定义为已删除”。在某些情况下,特殊成员函数已声明,但定义为已删除。

  • 如果没有用户声明的构造函数 (§12.1/5),则自动生成默认构造函数。
  • 如果没有用户声明的移动构造函数或移动赋值运算符,则自动生成复制构造函数(因为在 C++03 中没有移动构造函数或移动赋值运算符,这在 C++ 中简化为“始终” 03) (§12.8/8).
  • 如果没有用户声明的移动构造函数或移动赋值运算符,则自动生成复制赋值运算符 (§12.8/19)。
  • 如果没有用户声明的析构函数 (§12.4/4),则自动生成析构函数。

仅限 C++11 及更高版本:

  • 如果没有用户声明的复制构造函数、复制赋值运算符或析构函数,并且生成的移动构造函数有效 (§12.8/10),则自动生成移动构造函数。
  • 如果没有用户声明的复制构造函数、复制赋值运算符或析构函数,并且生成的移动赋值运算符有效(例如,如果它不需要分配常量成员),则自动生成移动赋值运算符( §12.8/21).

关于c++ - 自动生成默认/复制/移动构造函数和复制/移动赋值运算符的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54076671/

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