10

C++ では、静的メンバー関数にローカル変数がある場合、それらのローカル変数も暗黙的に静的であることを意味しますか、それとも本当にローカルですか?

例:

static void myClass::somefunc(int someint)
{

int myint = someint;  // is myint really a local variable or does it change due to the static qualifier at function level?


}

また、この関数を実行しているスレッド プールとは別のスレッドですが、myint をロックで保護する必要がありますか? 渡されるすべての値が異なり、互いに関係がないと仮定します。

編集:答えてくれてありがとう。boost::shared_ptr<T>では、このオブジェクトが別のスレッドによって同時に使用されないことを知っていて、を渡したらどうなるでしょうか? (それを本当に保証できるかどうかはわかりませんが、できますか?)

生のptrが渡されたと思いますが、それがいたるところで使用されている場合、何らかの保護が必要でしょうか?

4

6 に答える 6

10

それらは、宣言しない限りローカルですstatic。関数の呼び出しごとに変数の独自のコピーがあり、それらを保護する必要はありません。

于 2010-12-22T13:57:50.257 に答える
1

static キーワードは、関数に非表示の「this」引数が渡されないことを意味します。また、関数はクラス インスタンス データにアクセスできません。関数の静的修飾子は、関数のローカル データには影響しません。

static RetType SomeClass::SomeMethod(Type arg)自由関数と同じ「型」を持っていますRetType SomeFunc(Type arg)

よろしく、
マルシン

于 2010-12-22T14:07:12.390 に答える
1

myintはローカルでsomefuncあり、スレッド間で保護する必要はありません。

于 2010-12-22T13:57:41.207 に答える
1

あなたの例の myint はローカル変数であり、somefunc が呼び出されるたびに myint が生きます。しかし、それ以上ではありません。

myint はローカル変数であるため、保護する必要はありません

于 2010-12-22T13:58:11.590 に答える
1

myint本当にローカルになります。保護について心配する必要はありません。myintメモリ内の関数呼び出しごとに、スタック上に個別のスペースが作成されます。

于 2010-12-22T13:58:18.463 に答える
1

myintスレッドはローカル変数を共有しないため、変数を保護する必要はありません。

于 2010-12-22T14:04:02.063 に答える