#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
}
値初期化、それをせずにfoo()
にタイプA
の右辺値を渡すことが可能ですか?値の初期化と左辺値のどちらを使用する必要がありますか?右辺値としてデフォルトの初期化(NOT値/ゼロ初期化)PODを取得
値の初期化を避けることのポイントは、10ナノ秒を超えないようにすることです。このような状況はどうですか:valgrindを使用した初期化されていないメモリアクセスによるレガシーアプリのバグを探しています。ゼロはアプリの有効な値とはみなされません。値を初期化すると、初期化されていないメモリアクセスの場所を特定することができなくなります。
初期化されていない値を印刷するのはUBですが、実際の使用例は印刷に限定されません。私の質問はそれがなければ有効なままです。
初期化されていないクラスメンバーは動作を定義していますか? –
'A 'はPODであるためにすべてのボックスにチェックを入れなければなりませんか?空のユーザ提供のデフォルトのコンストラクタを与えることができれば、値の初期化はデフォルトの初期化と実質的に等しくなり、あなたは未定義の動作を得ます;-)。 – bogdan
@bogdan「A」は私のコントロール外になる可能性があります。例えば。 'struct tm' – nodakai