- 締切済み
C++でJavaのStaticイニシャライザに相当するものは何ですか?
いつもお世話になってます。 C++でJavaのStaticイニシャライザに相当するものは何ですか? ご存知の方、教えてくださるとありがたいです。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
回答No.3
> C++でJavaのStaticイニシャライザに相当するものは何ですか? そんなものは不要です。 bool t = init(); のように、静的記憶域期間を持つオブジェクトtの初期化子で関数を呼べばよいだけです。 終了時にデストラクタを呼ぶ必要もあるのなら、 struct initializer { initializer() { /* 初期化処理 */ } ~initializer() { /* 終了処理 */ } } t; とでもしておけばよいでしょう。 これらは、Javaとは違って、必ずしもクラス単位で行う必要はありません。 もちろんクラス単位でもかまいませんし、翻訳単位とか、ライブラリ単位とか、アプリケーション単位とか、任意の単位で初期化を行うことができます。
- MrBan
- ベストアンサー率53% (331/615)
回答No.2
「目的」はなんでしょう。 class Foo { Foo() {} }; class Bar { static Foo foo; }; Foo Bar::foo; // <- staticなメンバ変数 これが一番近そうですが、 「期待するような動作」が分からないので望むものかどうかは不明。 Javaとは結構違うので、Javaのつもりで書くとはまりやすそうなところです。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
C++ の規格にはありません.
質問者
お礼
そうですか。もともとなかったんですね・・・。 ご回答いただきありがとうございます。
お礼
ご回答ありがとうございます。 あるクラス内で宣言したstatic属性の値を、初期設定時に切り替えられないかを知りたくて本件質問をしました。 (1)static値を他クラスのメソッド・他関数で変更しない。 (2)そのクラスのインスタンス生成はしない。 このような場合、Javaならstaticメソッドで対応できたと思うんですが、 C++では無理なんでしょうか? (例) ----------------------------------------- class A{ public: static int testHour; } //testHourの初期値は、現在時としたい。 //Javaならばstaticイニシャライザで対応できるはず。 //以下ではtestHourの初期値は固定値になってしまう。 int testHour = 12; ------------------------------------------ 上の例でtestHourの初期値を現在時にする方法はないものでしょうか。 どうかご指導ください。よろしくお願いします。