4
#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 であると言うかもしれませんが、私の「実際の」ユースケースは印刷に限定されません。私の質問はそれがなくても有効なままです。

4

1 に答える 1