の中に許可されていません:静的/グローバル変数、次のように私は私のC++クラスのグローバル変数を定義しているC++
std::string VAR = "HELLO_WORLD";
しかしcpplintは私に言っている:
静的/グローバル文字列変数ではありません許可されます。 [実行時/文字列] [4]
考えられる理由はありますか?
の中に許可されていません:静的/グローバル変数、次のように私は私のC++クラスのグローバル変数を定義しているC++
std::string VAR = "HELLO_WORLD";
しかしcpplintは私に言っている:
静的/グローバル文字列変数ではありません許可されます。 [実行時/文字列] [4]
考えられる理由はありますか?
基本的に静的アナライザかかわらず、使用しているは禁止このstd::string
がコンストラクタが含まれているため、その文は、実際に「何かをします」。
したがって、グローバルスコープではなく関数内にある必要があります。それが適切なポインタへの読み取り専用const char[]
リテラルの割当て以下でいないので、一方
、
const char* VAR = "HELLO_WORLD";
は、放出されます。
コンストラクタ付きの型はグローバル変数にすることができます。彼らは動的に初期化され、それらのすべての良いもの。 'std :: string'は' constexpr'変数にすることはできませんが、OPはこれがそうであることを示していません。 – StoryTeller
_ "どのような意味で" _する必要がありますか?おそらく、言語ではなく、 'cpplint'によって行われた恣意的な判断でしょう。はい、名前空間のスコープのオブジェクトは静的な初期化順序の失敗になりがちですが、その他の理由ではおそらく推奨できませんが、正しく使用すると完全に定義されています。 –
何ですか?名前空間/グローバルスコープで重要ではないクラスをインスタンス化することは、完全に合法です!たぶんCpplintはGoogleのコード規約違反だと言います。 –
ドキュメントを一読しましたか? https://google.github.io/styleguide/cppguide.html#Static_and_Global_Variables –