[解決済み】オブジェクトの初期化で{0}が意味するものは何ですか?
2022-04-04 14:25:10
質問
いつ
{0}
がオブジェクトの初期化に使われていますが、これは何を意味するのでしょうか?への言及は見当たりません。
{0}
また、中括弧があるため、Google検索は役に立ちません。
コード例です。
SHELLEXECUTEINFO sexi = {0}; // what does this do?
sexi.cbSize = sizeof(SHELLEXECUTEINFO);
sexi.hwnd = NULL;
sexi.fMask = SEE_MASK_NOCLOSEPROCESS;
sexi.lpFile = lpFile.c_str();
sexi.lpParameters = args;
sexi.nShow = nShow;
if(ShellExecuteEx(&sexi))
{
DWORD wait = WaitForSingleObject(sexi.hProcess, INFINITE);
if(wait == WAIT_OBJECT_0)
GetExitCodeProcess(sexi.hProcess, &returnCode);
}
これがないと、上記のコードは実行時にクラッシュします。
解決方法は?
ここで起きているのは アグリゲート を初期化します。 以下は、ISO仕様のセクション8.5.1における集約の(省略された)定義です。
集約は、ユーザ宣言されたコンストラクタ、プライベートまたは保護された非静的データメンバ、基底クラス、および仮想関数を持たない配列またはクラスです。
では
{0}
を使ってこのように集約を初期化することは、基本的にトリックで
0
というように、全体を というのも、集合体初期化を使用する場合
のすべてのメンバーを指定する必要はありません。
で、仕様では指定されていないメンバはすべてデフォルトで初期化されることになっており、つまりは
0
単純な型の場合
以下は、仕様書からの該当箇所の引用です。
リスト内の初期化子の数が、リスト内のメンバの数より少ない場合。 集合体でない各メンバーは 明示的に初期化されなければならない。 デフォルトで初期化される。 例
struct S { int a; char* b; int c; }; S ss = { 1, "asdf" };
初期化
ss.a
で1
,ss.b
と"asdf"
であり、かつss.c
の値で という形式の式があります。int()
ということである。0
.
このトピックに関する完全な仕様書をご覧いただけます。 こちら
関連
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】'cout'は型名ではない
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】'std::cout'への未定義の参照