派生构造函数警告:永远不会被执行

Derived constructor warning: will never be executed

本文关键字:执行 永远 构造函数 警告 派生      更新时间:2023-10-16

大家好

我刚刚有一些奇怪的问题,而推进c++,使用Code::Blocks 10.05, FreeBSD 9.1

Source in lib.cpp:

class A{
  public:
    A();
    A(var1, var2);
};
A::A(){ imlementation }
A::A(va1, var2) {implementation }
class B : public A{
  public:
    B();
    B(var1, var2);
};
B::B() : A() {} // this is Astr#
B::B(var1, var2) : A(var1, var2) {} // this is Bstr#

Source in lib.h:

class A{
  public:
    A();
    A(var1, var2);
};
class B : public A{
  public:
    B();
    B(var1, var2);
};

Source in main.cpp:

#include "lib.h"
...
int main(){
  ...
  B* Bptr = new B();
  B* Bptr2 = new B(var1, var2);
  ...
}

我得到这些构建警告:

.../lib.cpp||In constructor 'B::B(var1, var2)':
.../lib.cpp|Bstr#|warning: will never be executed
.../lib.cpp||In constructor 'B::B(var1, var2)':
.../lib.cpp|Bstr#|warning: will never be executed
.../lib.cpp||In constructor 'B::B()':
.../lib.cpp|Astr#|warning: will never be executed
.../lib.cpp||In constructor 'B::B()':
.../lib.cpp|Astr#|warning: will never be executed
||=== Build finished: 0 errors, 4 warnings ===|

此警告仅在调试模式下出现,发布版本似乎正常。代码构建和运行良好,但我做错了什么?

lib.h中的构造函数B(var1,var2)是私有的

警告:永远不会被执行

是GCC的警告,可以通过-Wunreachable-code启用。-Wunreachable-code非常不可靠,不宜使用;因此,在较新的GCC版本中,整个选项被完全删除了。(实际上,并没有完全删除:命令行选项-Wunreachable-code仍然存在,但它不再做任何事情。)