无法引用 “…” 的默认构造函数 – 它是已删除的函数

测试环境:ubuntu18.04 gcc-7.5.0

1.1 const 修饰的普通成员变量

两种显式初始化方式:

  • 构造函数初始化列表
  • 在声明处直接提供初始值

如果两种初始化方式都没有提供,代码将无法编译通过;

特别注意,当没有在声明处显式初始化时,存在两种编译错误情况:

  • 提供了构造函数,但没有对const成员变量进行初始化,编译器直接提示“必须初始化”(错误比较直观);
  • 没有提供构造函数,一般情况下,如果类中不存在未初始化的const成员,普通成员的初始化工作将由编译器自动生成的默认构造来完成;但编译器在生成默认构造前,检测到存在未初始化的const成员,将不再生成默认构造。所以,在业务代码中使用默认构造时将发现编译器报了一个较隐蔽的错误:“无法引用 “…” 的默认构造函数 – 它是已删除的函数”
1.2 引用类型的成员变量

初始化规则与常量成员类似;

1.3 总结

此类较隐蔽的错误,其实也可以将其归纳为编程习惯(规范)这一类,即不纠结于“普通类型”、“常量”、“静态类型”之间初始化方式的差异(除非是专门研究类型初始化机制),而是养成对所有类型的变量都进行初始化的习惯。

参考:

C++ 不能使用默认构造函数的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值