Given 是一个具有以下元素的类:
std::array<Class*, 4> children;
nullptr
在调试模式下,检查返回的未初始化数组的元素true
。
if(children[0]==nullptr)
但是,在发布模式下(启用优化,无论是 O1、O3 还是 Os),检查返回false
。
似乎元素以某种方式初始化,但访问它们仍然会导致分段错误。为了避免这种行为,我必须显式地初始化std::array
withnullptr
元素。
std::array<Class*, 4> children{{nullptr}};
为什么会这样?
编辑:在这种情况下使用的编译器是Apple LLVM 4.2 (Xcode 4.6.3)
.