静的メンバーを持つクラスがあります。これは、同じクラスのプライベート静的関数を使用して初期化されます。静的メンバーの初期化中にプライベート静的関数にアクセスする
#include <iostream>
#include <string>
class A
{
public:
static std::string const s;
private:
static std::string make()
{
return "S";
}
};
std::string const A::s = A::make();
int main()
{
std::cout << A::s << std::endl;
// std::cout << A::make() << std::endl; // <-- Does not work
return 0;
}
私の質問は次のとおりです。これはどのルールのためですか?明らかに、私はクラスの外からプライベート関数にアクセスすることが許可されていないので、コメント部分は機能しません。スタートアップ時にプライベート静的メンバーを初期化するのはなぜ特別なケースですか? (このノートの意図は何ですか?この正確なケースを許可するのですか?)
私はスタティックメンバー(ここではInitializing private static membersなど)を初期化するための他のメカニズムについて認識しています。しかし私の場合、メンバーはconstなので、それを設定する唯一の方法は、定義の場所での直接の初期化によるものです。
あなたはconstについて正しいです。質問を編集しました。ありがとう。 –
私はそれが明確になるであろうと思い、「静的データメンバの初期化は、静的データメンバは(クラス定義外)名前空間スコープで定義されているにもかかわらず、クラスの特徴付けの一部とみなされます。」 (「クラス定義」はC++標準では非常に正式な意味を持っているため、「特性」を使用しています) –
@MartinBonner Fine。 – songyuanyao