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

Why was I able to default construct an object without a default constructor?

本文关键字:默认 构造函数 情况下 对象 为什么      更新时间:2023-10-16

这是C和C++之间边界层上的一行函数。函数得到一堆void*并将它们强制转换为应该的类型。发现错误:

MDLPeriph periph_dline = *static_cast<MDLPeriph*>(dline_periph);

实际上,peripheral_dline应该是一个参考。令我困惑的是,这段代码编译时没有任何警告。此外,gdb在检查此代码时,会报告一个Internal GDB error.并崩溃。

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

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

平台和工具:

Windown 7
此版本的yagarto使用以下版本:

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

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

这里没有默认构建的内容。

指针投射导致dline_periph指向的任何对象都被解释为MDLPeriph对象,而不创建新对象;然后使用其复制构造函数来复制初始化CCD_ 6。