#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
}
値を初期化せずA
に型の右辺値を渡すことは可能ですか? foo()
値の初期化または左辺値のいずれかを使用する必要がありますか?
10 ナノ秒以下の「コスト」で値の初期化を回避するポイントは何なのか、疑問に思うかもしれません。このような状況はどうでしょうか: valgrind による初期化されていないメモリ アクセスによって引き起こされるレガシー アプリのバグを探しており、ゼロはアプリの有効な値とは見なされません。値の初期化により、valgrind が初期化されていないメモリ アクセスの場所を特定できなくなります。
初期化されていない値を印刷することは UB であると言うかもしれませんが、私の「実際の」ユースケースは印刷に限定されません。私の質問はそれがなくても有効なままです。