C++ で、さまざまなクラス、関数、ファイルで使用できる非ローカル const 文字列を定義したい場合、私が知っているアプローチは次のとおりです。
define ディレクティブを使用します。
#define STR_VALUE "some_string_value"
const クラスのメンバー変数。
class Demo { public: static const std::string ConstStrVal; }; // then in cpp std::string Demo::ConstStrVal = "some_string_value";
const クラスのメンバー関数。
class Demo{ public: static const std::string GetValue(){return "some_string_value";} };
私がはっきりしていないのは、2番目のアプローチを使用する場合、変数 ConstStrVal は、実際にコードで使用される前に常に「some_string_value」に初期化されるということです。「静的初期化順序の大失敗」のため、これについて心配しています。この問題が有効である場合、なぜ誰もが 2 番目のアプローチを使用しているのですか?
2 と 3 のどちらが最善のアプローチですか? #define ディレクティブはスコープを尊重しないことを私は知っています。ほとんどの人はそれをお勧めしません。
ありがとう!