为什么我能够在没有默认构造函数的情况下默认构造对象?

Vor*_*rac -3 c++ constructor

这是C和C++之间边界层上的一行函数.该函数获取了一堆void* 并将它们转换为它们应该存在的类型.发现错误:

MDLPeriph periph_dline = *static_cast<MDLPeriph*>(dline_periph);
Run Code Online (Sandbox Code Playgroud)

确实,periph_dline应该是一个参考.让我感到困惑的是,这段代码在没有警告的情况下编译.此外,gdb在检查此代码时,报告Internal GDB error.和崩溃.

据我所知,上面的代码默认构造了一个MDLPeriph对象.然后使用新对象的复制构造函数从右侧分配值.

但是MDLPeriph没有默认构造函数!这怎么可能?

平台和工具:

Windown 7
yagarto的这个版本使用以下版本:

binutils:2.23.1 gcc:4.7.2 newlib:1.20.0 gdb:7.5.1

(2012年12月22日,mifi)openocd o.7.0

Mik*_*our 5

这里没有任何默认构造.

指针转换会导致任何dline_periph点被解释为MDLPeriph对象,而不会创建新对象; 然后用于periph_dline使用其复制构造函数进行复制初始化.