アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になってます。

C++でJavaのStaticイニシャライザに相当するものは何ですか?
ご存知の方、教えてくださるとありがたいです。

よろしくお願いします。

A 回答 (3件)

> C++でJavaのStaticイニシャライザに相当するものは何ですか?



そんなものは不要です。

bool t = init();

のように、静的記憶域期間を持つオブジェクトtの初期化子で関数を呼べばよいだけです。
終了時にデストラクタを呼ぶ必要もあるのなら、

struct initializer
{
 initializer() { /* 初期化処理 */ }
 ~initializer() { /* 終了処理 */ }
} t;

とでもしておけばよいでしょう。

これらは、Javaとは違って、必ずしもクラス単位で行う必要はありません。
もちろんクラス単位でもかまいませんし、翻訳単位とか、ライブラリ単位とか、アプリケーション単位とか、任意の単位で初期化を行うことができます。
    • good
    • 0

「目的」はなんでしょう。



class Foo {
 Foo() {}
};

class Bar {
 static Foo foo;
};

Foo Bar::foo; // <- staticなメンバ変数

これが一番近そうですが、
「期待するような動作」が分からないので望むものかどうかは不明。
Javaとは結構違うので、Javaのつもりで書くとはまりやすそうなところです。
    • good
    • 0
この回答へのお礼

 
ご回答ありがとうございます。

あるクラス内で宣言したstatic属性の値を、初期設定時に切り替えられないかを知りたくて本件質問をしました。
(1)static値を他クラスのメソッド・他関数で変更しない。
(2)そのクラスのインスタンス生成はしない。

このような場合、Javaならstaticメソッドで対応できたと思うんですが、
C++では無理なんでしょうか?

(例)
-----------------------------------------
class A{
public:
  static int testHour;
}

//testHourの初期値は、現在時としたい。
//Javaならばstaticイニシャライザで対応できるはず。
//以下ではtestHourの初期値は固定値になってしまう。
int testHour = 12;
------------------------------------------

上の例でtestHourの初期値を現在時にする方法はないものでしょうか。
どうかご指導ください。よろしくお願いします。
 

お礼日時:2010/03/30 22:07

C++ の規格にはありません.

    • good
    • 0
この回答へのお礼

そうですか。もともとなかったんですね・・・。
ご回答いただきありがとうございます。

お礼日時:2010/03/30 20:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!