問題タブ [static-initialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
174 参照

java - static() メソッド (宣言なし)

私は次のクラスを持っています:

この静的メソッドはいつ、どのように呼び出されますか?

そのような静的メソッド (名前/戻り値なし) を作成する目的は何ですか?

0 投票する
2 に答える
358 参照

c++ - ファイルレベルの静的変数の順序は、特定の翻訳単位内で常に同じですか?

次の 2 つのソース ファイルに分割されたプログラムがあります。

たとえば .cpp

__ main.cpp

このプログラムの出力は次のようになることが保証されていますか?

すべてのプラットフォームとコンパイラで? もしそうなら、標準のどこにこれが書かれていますか?first名前空間を使用していて、別の名前空間に表示されていても問題はありsecondますか? それらが静的ではなく、匿名の名前空間を使用している場合はどうですか?

0 投票する
2 に答える
358 参照

c++ - C++ でクラスの静的配列メンバーを初期化するより良い方法 ( const が優先されます)

クラスのメンバーとして、関数へのポインターの静的配列があります。

初期化する必要がありますが、この配列は 64K アイテムの長さであることが判明したため、静的イニシャライザーで初期化することは、{ x, y, z, ... }コードが乱雑になるため現実的ではありません。

代わりに、いくつかのループを使用してコードで初期化する必要があります。

私がこれを行う方法は、コンストラクターで配列を初期化し、staticそれにフラグを設定することです。そのため、クラスの最初のインスタンスの構築のみがこの初期化を起動します。

また、インスタンス内からこの静的フラグにアクセスすることはスレッドセーフではありませんが、それは別の話です。

これを行うためのよりクリーンまたはより良い方法はありますか?

私もこの配列を にしたいのですがconst、それを行う唯一の方法はstatic {}初期化ですよね?

0 投票する
1 に答える
73 参照

c++ - ライブラリ内のすべての動的初期化を検索する

ダイナミックライブラリにコンパイルするいくつかの大きなコードベースがあります。これらのいくつかには、非常に高価な動的グローバル動的初期化子があることを私は知っています。(つまり、構築に非常にコストがかかるクラス/構造体のグローバルインスタンスです。)

これらの動的初期化子がコード内の何/どこにあるかのリストを表示して、それらが高価でリファクタリングが必要かどうかを確認する方法が必要です。これらのライブラリのいくつかは非常に大きく、おそらく何百もの動的初期化子を含んでいるので、多くのアセンブリを掘り下げることは避けたいと思います(それらの多くは文字列構造のように小さくてかなり安価です)。

これを支援するツールはありますか?(私のツールチェーンはRedhat Linux / gcc / cmakeです。)

0 投票する
2 に答える
14868 参照

c++ - C++ 静的初期化 vs __attribute__((constructor))

例:

それは決定論的な天気ですかfoo、それともbar最初に印刷されますか?

(静的オブジェクトのコンストラクターが常に最初に実行されることを願っていますが、確信が持てず、コンストラクター属性に関するGCCのドキュメントはそれについて何も述べていません。)

0 投票する
1 に答える
127 参照

module - D の別のモジュールでのクラスの静的初期化と使用

私のプログラムには、main() に入る前に割り当てたいクラスがあります。これらを別のモジュールに隠して、コードが煩雑にならないようにしたいと思います。ただし、モジュールがスコープ外になるとすぐに (main() に入る前に)、オブジェクトの割り当てが解除されるため、main で null 参照を使用しようとします。簡単な例:

C++ や Java のクラスとは対照的に、モジュールがカプセル化の基本単位であるという概念にまだ慣れていません。これを D で行うことは可能ですか、それとも初期化をメイン モジュールに移動する必要がありますか?

0 投票する
2 に答える
296 参照

c++ - ブロック スコープの静的変数またはスレッド ストレージ期間変数の初期化の失敗の原因は何ですか?

この質問に答えた後、標準論文で満足のいく答えが見つからなかったので、疑問に思い始めました。標準では、言及された変数の初期化について次のように述べています。

§6.7 [stmt.dcl] p4

[...] それ以外の場合、そのような変数は、コントロールがその宣言を最初に通過するときに初期化されます。このような変数は、初期化の完了時に初期化されたと見なされます。例外をスローして初期化が終了した場合、初期化は完了していないため、次に制御が宣言に入ったときに再試行されます。

例外をスローする以外の理由で初期化が失敗した場合に、初期化が再試行される原因については言及されていません (longjmp()いくつか例を挙げると、 、thead exit、シグナル)。

標準の何かを見落としていませんか? 初期化、宣言、および例外句を何度も調べ、 「静的」をすばやく検索してCWG 欠陥の目次を調べましたが、関連するものは見つかりませんでした。

これは規格の過少仕様 (およびそのような欠陥) ですか?

0 投票する
1 に答える
1254 参照

android - Android コンテンツ プロバイダの urimatcher

私はAndroidが初めてです。私は Android のコードを調べましたが、 static内のステートメントが最初に実行されるため、ContentProvider少し混乱しています。ここのコード内には、についての知識のない静的ブロックがあります。初期化前に静的ブロックを実行する必要があるため、どのように使用できますか。UriMatcherUriMatcherPROVIDER_NAMEPROVIDER_NAME

どんな助けでも大歓迎です...事前に感謝します

0 投票する
6 に答える
767 参照

java - Java - 静的初期化

私はコードを書きました:

出力は次のとおりです。

get z
子コンストラクタ
子コンストラクタ
get y
get x
z の値は 0
子コンストラクタ
main の z の値は 0

z の値が 10 ではなく 0 である理由を誰か説明してもらえますか?

編集:-皆さん、ありがとうございます。最初の質問に対する回答が得られました。クラスがロードされた後、クラスの最初のオブジェクトがインスタンス化される前に静的ブロックが実行されることを知る限り、私にはまだ疑問があります。それでは、SOP("The value of z is "+z)" は SOP("Child constructor") の前に実行されるべきでした! そうじゃない?

0 投票する
1 に答える
648 参照

arrays - Pascal - 配列内のデータのハードコーディング - ショートカット

これが私がやろうとしていることです:

1行で値を割り当てることができるこれを達成するための近道はありますか?