Позволяет иметь этот код:
#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;
}
Я хочу выдать предупреждение, что y в X не инициализирован. -Wall, -Wmissing-field-инициализаторы, кажется, ничего не делают. Он компилируется без предупреждений.
Этот пример кода производит этот вывод:
1 0 6,95323e-310
Таким образом, даже если y инициализируется в 0 (а это не так, потому что анализ clang помечает его как неинициализированный), ясно, что simd_double3 не инициализируется в 0.
Также анализ лягушки помечает x.y как неинициализированный. ( 1-й аргумент вызова функции является неинициализированным значением )
Кроме того, при создании X в куче в режиме выпуска содержимое x.y является мусором. Вторая строка печатает: 2 -1094795586, y явно не инициализирован.