2017-12-20 12 views
1

の中に許可されていません:静的/グローバル変数、次のように私は私のC++クラスのグローバル変数を定義しているC++

std::string VAR = "HELLO_WORLD"; 

しかしcpplintは私に言っている:

静的/グローバル文字列変数ではありません許可されます。 [実行時/文字列] [4]

考えられる理由はありますか?

+0

ドキュメントを一読しましたか? https://google.github.io/styleguide/cppguide.html#Static_and_Global_Variables –

答えて

5

疑問を避けるために、言語自体がこれを許可します。

基本的に静的アナライザかかわらず、使用しているは禁止このstd::stringコンストラクタが含まれているため、その文は、実際に「何かをします」。

したがって、グローバルスコープではなく関数内にある必要があります。それが適切なポインタへの読み取り専用const char[]リテラルの割当て以下でいないので、一方

const char* VAR = "HELLO_WORLD"; 

は、放出されます。

+1

コンストラクタ付きの型はグローバル変数にすることができます。彼らは動的に初期化され、それらのすべての良いもの。 'std :: string'は' constexpr'変数にすることはできませんが、OPはこれがそうであることを示していません。 – StoryTeller

+0

_ "どのような意味で" _する必要がありますか?おそらく、言語ではなく、 'cpplint'によって行われた恣意的な判断でしょう。はい、名前空間のスコープのオブジェクトは静的な初期化順序の失敗になりがちですが、その他の理由ではおそらく推奨できませんが、正しく使用すると完全に定義されています。 –

+1

何ですか?名前空間/グローバルスコープで重要ではないクラスをインスタンス化することは、完全に合法です!たぶんCpplintはGoogleのコード規約違反だと言います。 –

関連する問題