#include <iostream>
struct A {
int x;
};
void foo(A a) {
std::cout << a.x << std::endl;
}
int main() {
A a;
foo(a); // -7159156; a was default-initialized
foo(A()); // 0; a was value-initialized
}
으로 기본 초기화 (NOT 값/제로 초기화) POD를 가져 오기? 값 초기화 또는 lvalue 중 하나를 사용해야합니까?그것을 가치를 초기화하지 않고 <code>foo()</code>에 유형 <code>A</code>의를 rvalue를 통과 할 수있는를 rvalue
"비용이 많이 든다"값 초기화가 10 나노초를 넘지 않을 때 무슨 일이 일어날 지 물어볼 수 있습니다. 어때? valgrind로 초기화되지 않은 메모리 액세스로 인해 레거시 앱에서 버그를 찾고 있습니다. 0은 앱의 유효한 값으로 간주되지 않습니다. 값을 초기화하면 valgrind가 초기화되지 않은 메모리 액세스 위치를 찾을 수 없습니다.
초기화되지 않은 값을 인쇄하는 것은 UB이지만 내 "실제"유스 케이스는 인쇄에만 국한되지 않는다고 말할 수 있습니다. 내 질문은 그것 없이는 유효해야합니다.
초기화되지 않은 클래스 멤버가 동작을 정의 했습니까? –
'A'는 POD가되기 위해 모든 상자를 체크해야합니까? 비어있는 사용자 제공 기본 생성자를 제공 할 수 있으면 값 초기화가 default-initialization과 실질적으로 동일 해지며 원하는 정의되지 않은 동작을 얻을 수 있습니다. – bogdan
@bogdan'A'는 제 통제에서 벗어날 수 있습니다. 예 : 'struct tm' – nodakai