1

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Static_and_Global_Variables

クラス型の静的変数またはグローバル変数は禁止されています。構築と破棄の順序が不確定であるため、見つけにくいバグが発生します。

クラス型のグローバル変数が などの他のグローバル変数に依存していないstd::string strvar("abc")場合、それを使用するのは何が間違っている/安全でないのですか?

また、ガイドは次のようにも述べています。

...クラス型のグローバルを禁止することに加えて、静的 POD 変数を関数の結果で初期化することを許可しません。他のグローバル。

同じ理由で問題ないと思いますstrvar。そのコンストラクター自体は他のグローバルに依存しません。

また、C++11 の POD のより緩い定義には、この点に関して何らかの反映があるのだろうか?

4

3 に答える 3

3

Google はルールをシンプルにしようとしているようです。したがって、かなり安全な場合もあるかもしれませんが、それらの例外を説明するのは困難でした。そして、これらの例外を許可することの利点は、おそらく、この余分な複雑さを正当化するのに十分ではありません.

于 2012-09-17T04:15:51.583 に答える
2

クラスのグローバルインスタンスと静的インスタンスの問題は、クラスが構築/破棄される順序が実装に依存することです。これは、特定の時間にそれらが存在することに依存するコードがある場合、歓迎されない驚きを得る可能性が高いことを意味します。

于 2012-09-17T05:03:15.247 に答える
0

多くのクラス、特に Google 標準ライブラリ内のクラスの実装は、プログラムの開始時に初期化されるグローバルな状態に依存しています。クラス コンストラクターは、明らかに他のグローバルを参照しない方法で、ネットワーク接続を開いたり、シングルトンをフェッチしたりできます。

一般に、コンストラクターは、宣言したグローバルが初期化されていると自由に想定する必要があります。これは、リンカーによって初期化されたオブジェクトで静的に呼び出されると壊れます。

于 2012-09-17T03:12:37.330 に答える