C++编译中常见的一些警告信息及处理办法(未完待续)

本文介绍了C++编译过程中常见的三种警告:初始化列表次序错误、虚函数被隐藏以及无效语句。针对这些问题,分别提供了对应的解决策略,帮助开发者提升代码质量。
摘要由CSDN通过智能技术生成

1# warning: ... will be initialized after... / ... warning:   when initialized here [1][2]

示例:

 class foo {
   //declaration
   int i;
   int j;
        
   public:
     //constructor & its initializer
     foo(int val): j(val), i(j) {}
 };
 此示例foo类编译时就将出现上面的警告信息。 
C++规定:构造函数初始化列表(constructor's initializer)中,编译器对成员初化的实际顺序是由成员的声明/定义顺序决定的,而与初始化列表中成员的排列顺序无关。在这个示例中,声明的顺序是先i后j,那么按根据这个规定,编译器也会先初始化i,再初始化j。这样上面的示例
  foo(int val): j(val), i(j) {}
在编译过程中首先就是用一个还未初始化的成员j来初始化成员i,这当然会给程序带来bug。所以,编译器友好地给出了上面那条警告信息。 解决办法自然是调整初始化顺序,与声明顺序一致:
  foo(int val): i(val), j(val) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值