我们有如下代码:
#include <iostream>
#include <simd/simd.h>
class X {
public:
X(int a) : x{a} {} // <-- only x is initialized, y is not
int x;
int y;
simd_double3 d;
};
int main(int argc, const char * argv[]) {
X x(1);
X* xx = new X(2);
std::cout<<x.x<<" "<<x.y<<" "<<x.d.x; // <-- y and x.d are used, but not initialized
std::cout<<xx->x<<" "<<xx->y<<"END\n";
return 0;
}
我想发出警告,X中的y没有被初始化。-Wall,-Wmissing-field-initializers似乎没有起作用。它可以编译而没有警告。 此示例代码产生此输出: 1 0 6.95323e-310 因此,即使将y初始化为0(事实上并没有,因为clang分析将其标记为未初始化),很明显simd_double3未被初始化为0。
另外,clang分析标记x.y为未初始化。(第一个函数调用参数是未初始化的值)
此外,在释放模式下在堆上创建X时,x.y的内容是垃圾。第二行打印:2 -1094795586,很明显y没有被初始化。