这是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
这里没有任何默认构造.
指针转换会导致任何dline_periph点被解释为MDLPeriph对象,而不会创建新对象; 然后用于periph_dline使用其复制构造函数进行复制初始化.