1. ホーム
  2. c++

[解決済み] C++で静的定数を初期化する場所

2022-06-02 11:19:26

質問

私はクラス

class foo {
public:
   foo();
   foo( int );
private:
   static const string s;
};

文字列を初期化するのに最適な場所はどこでしょうか? s を初期化するのに最適な場所はどこでしょうか?

どのように解決するのですか?

の任意の場所で 1 コンパイルユニット (通常は .cpp ファイル) であれば、どこでもかまいません。

foo.h

class foo {
    static const string s; // Can never be initialized here.
    static const char* cs; // Same with C strings.

    static const int i = 3; // Integral types can be initialized here (*)...
    static const int j; //     ... OR in cpp.
};

foo.cpp

#include "foo.h"
const string foo::s = "foo string";
const char* foo::cs = "foo C string";
// No definition for i. (*)
const int foo::j = 4;

(*) 標準にしたがって、あなたは i をクラス定義の外側で定義する必要があります (たとえば j のように) クラス定義の外側で、積分定数式以外のコードで使用される場合。詳細については、以下の David のコメントを参照してください。