当前位置: 首页 > wzjs >正文

凤翔做网站珠海特价做网站

凤翔做网站,珠海特价做网站,葫芦岛网站网站建设,中国建筑网官网招工平台拷贝构造函数显式写,编译器还会自动生成默认构造函数吗,还有什么函数会出现这种问题 在C中,当类显式定义某些特殊成员函数时,编译器可能不再自动生成其他相关函数。以下是详细分析: I. 显式定义拷贝构造函数对默认构造…

拷贝构造函数显式写,编译器还会自动生成默认构造函数吗,还有什么函数会出现这种问题

在C++中,当类显式定义某些特殊成员函数时,编译器可能不再自动生成其他相关函数。以下是详细分析:


I. 显式定义拷贝构造函数对默认构造函数的影响

规则

  • 默认行为:如果一个类没有显式声明任何构造函数,编译器会生成一个默认的无参构造函数

  • 例外情况:如果类显式声明了任何构造函数(包括拷贝构造函数),编译器不再自动生成默认构造函数

示例

class MyClass {
public:// 显式定义拷贝构造函数MyClass(const MyClass& other) { /* ... */ }
};int main() {MyClass obj1;          // 错误:默认构造函数被抑制MyClass obj2(obj1);    // 正确:调用拷贝构造函数return 0;
}

解决方法

显式定义默认构造函数:

class MyClass {
public:MyClass() = default;   // 显式要求编译器生成默认构造函数MyClass(const MyClass& other) { /* ... */ }
};

II. 其他受影响的特殊成员函数

除了默认构造函数,以下函数的自动生成规则也会受到显式定义其他函数的影响:

显式定义的函数编译器不再自动生成的函数
拷贝构造函数默认构造函数、移动构造函数、移动赋值运算符
拷贝赋值运算符移动构造函数、移动赋值运算符
移动构造函数拷贝构造函数、拷贝赋值运算符
移动赋值运算符拷贝构造函数、拷贝赋值运算符
析构函数移动构造函数、移动赋值运算符

III. 具体场景分析

(1) 显式定义拷贝构造函数

  • 抑制的自动生成函数

    • 默认构造函数(需显式定义)

    • 移动构造函数(需显式定义)

    • 移动赋值运算符(需显式定义)

(2) 显式定义析构函数

  • 抑制的自动生成函数

    • 移动构造函数(需显式定义)

    • 移动赋值运算符(需显式定义)

(3) 显式定义移动构造函数

  • 抑制的自动生成函数

    • 拷贝构造函数(需显式定义)

    • 拷贝赋值运算符(需显式定义)


IV. C++11 的改进:= default 和 = delete

为了更精细地控制编译器生成的特殊成员函数,C++11引入了显式语法:

(1) 强制生成默认函数

class MyClass {
public:MyClass() = default;                   // 强制生成默认构造函数MyClass(const MyClass&) = default;     // 强制生成拷贝构造函数MyClass(MyClass&&) = default;          // 强制生成移动构造函数
};

(2) 禁用特定函数

class NonCopyable {
public:NonCopyable() = default;NonCopyable(const NonCopyable&) = delete;  // 禁止拷贝NonCopyable& operator=(const NonCopyable&) = delete;
};

V. 总结:编译器自动生成函数的条件

特殊成员函数自动生成条件
默认构造函数没有显式声明任何构造函数
拷贝构造函数没有显式声明拷贝构造函数、移动构造函数、移动赋值运算符或析构函数
拷贝赋值运算符没有显式声明拷贝赋值运算符、移动构造函数、移动赋值运算符或析构函数
移动构造函数没有显式声明拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符或析构函数
移动赋值运算符没有显式声明拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符或析构函数
析构函数始终自动生成(除非显式声明)

VI. 最佳实践

  1. 显式定义或禁用关键函数:如果需要自定义拷贝、移动或析构逻辑,显式定义相关函数。

  2. 优先使用 = default:保留编译器生成的默认行为,避免手动实现冗余代码。

  3. 注意移动语义的兼容性:在定义拷贝操作时,考虑是否需要显式定义移动操作。

通过合理控制特殊成员函数的生成,可以避免潜在的错误,并确保类的行为符合预期。


文章转载自:

http://rPWntQPo.yjfzk.cn
http://i9QwxeQz.yjfzk.cn
http://UETjV02y.yjfzk.cn
http://pZ2YoerN.yjfzk.cn
http://Tl34pHus.yjfzk.cn
http://uOU1yrD0.yjfzk.cn
http://UyLtsKoi.yjfzk.cn
http://BKKc5ecm.yjfzk.cn
http://UuwjjwMj.yjfzk.cn
http://SYxkyocz.yjfzk.cn
http://MI1mzOmP.yjfzk.cn
http://ivRHHXUq.yjfzk.cn
http://uecRA26D.yjfzk.cn
http://VfG1y4ly.yjfzk.cn
http://oYZxV5pq.yjfzk.cn
http://YppEZEqz.yjfzk.cn
http://4LjX2uMa.yjfzk.cn
http://QUdW5jBj.yjfzk.cn
http://MMoiihGo.yjfzk.cn
http://jyjNkpOU.yjfzk.cn
http://QQXVXfHs.yjfzk.cn
http://RCIlQ5Lg.yjfzk.cn
http://PMsws5dD.yjfzk.cn
http://dEByVXvV.yjfzk.cn
http://C5aISt2V.yjfzk.cn
http://WPFxv9m1.yjfzk.cn
http://9is0Hz0t.yjfzk.cn
http://F7q1dDpD.yjfzk.cn
http://IuaXs4Sg.yjfzk.cn
http://8DwkuEq5.yjfzk.cn
http://www.dtcms.com/wzjs/778278.html

相关文章:

  • 蚌埠网站建设哪家好wordpress composer
  • 网站美工和平面设计公司建设网站的通知书
  • php开发网站项目心得wordpress 采集都有哪些
  • 建设小游戏网站空间类型选择网线插座接法
  • 西安做网站的公司做一个网站的市场价
  • 廊坊网站建设方案开发企业所得税如何征收
  • 广州市网站建设品牌想做推广哪个平台好
  • 网站数据库网络错误怎么解决方案网站中转页怎么做
  • 批量 网站标题wordpress代码实现下载文件
  • 网站标题怎么隔开朝阳区网站建设
  • 深圳建科院公司网站网站上的网站地图怎么做
  • 网络建站平台wordpress程序版本
  • 二手房网站排行wordpress密码注册
  • 商务网站建设一万字自适应 wordpress
  • ps网站背景图片怎么做东莞常平哪里好玩
  • 山东省住房和建设厅注册中心网站wordpress导入工具
  • 网站关键词太多好不好google英文网站
  • 如何建立属于自己的网站湖北网络推广有限公司
  • 怎么做网站关键词推广自己做的网站把密码改忘了怎么办
  • 模板网站的弊端在哪什么网站框架
  • 网站建设中出现的错误代码网站开发都需要哪些图
  • wordpress手机端404页面佛山做网络优化的公司
  • 可以做专利聚类分析的免费网站重庆南川网站制作公司电话
  • 网站开发付款方式项目分享网
  • 石家庄网站开发费用网站的内容管理系统
  • 明年做啥网站能致富渝水区城乡建设局网站
  • 网站建设的代码做医学网站
  • 免费下载图片的网站有哪些哪里可以做网站开发
  • 做电影网站都需要什么手续亚马逊网站网址是多少
  • 南京学网站建设网站优化 网站建设公司