2012-02-29 34 views
2

私はこのような連鎖関数呼び出しを含む大規模なアプリケーションを持っています、cfg()は、構成オブジェクトを返す「グローバル関数」です。連鎖呼び出しコールの順序は、

連鎖関数呼び出しのコードは、最初にx、次にyで処理します。ただし、C++では、コンフィグレーションオブジェクトからxyのコンフィグレーションパラメータを抽出するタイミングを定義していません。実際、デバッグおよびリリースモード(MS Visual Studio 2005)でアプリケーションを実行すると、Configuration::getへの呼び出しの順番は逆になります。

ランダム値をConfiguration::get(テスト用)から返すサポートが追加されるまでは、すべて正常でした。デバッグモードとリリースモードの動作が違うようになりました。

だから私の質問は次のとおりです。

は、私はこの問題を解決し、まだ連鎖関数呼び出しを使用することはできますか? (私たちはこのように多くのコードを書いています;すべてを変更するのは面倒です)

たとえば、volatileのトリックを使用できますか?

+0

あなたが_random values_を返すときに結果がどのように異なるかについて少し混乱します。確かに結果は常に異なっているべきですか? –

+0

@LightnessRacesinOrbit私は定数種子が – anatolyg

+0

OKの擬似ランダムジェネレータを使用します。珍しいですが、大丈夫です。 :) –

答えて

3

いいえ、できません。関数の引数の評価の順序は不特定であり、それについて何もできません。

この順序が重要な独自のシーケンスポイントを作成するには、チェーンを解除する必要があります。

関連する問題